一、docker安装与卸载
1、安装
dnf -y install dnf-plugins-core
/// 添加阿里云镜像
dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 如果是欧拉系统,编辑/etc/yum.repos.d/docker-ce.repo,将$Release替换为7,centos跳过此步骤
sed -i 's/\$releasever/7/g' /etc/yum.repos.d/docker-ce.repo
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
2、卸载
dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
二、docker操作命令
1、镜像操作
镜像查询、构建、删除操作
docker --help
#查询镜像
docker search image_name:tag
#拉取远程仓库镜像
docker pull image_name:tag
docker pull registry-mirror/image_name
#打包镜像
docker save -o image_name.img.gz image_name:tag
#加载本地镜像
docker load -i image_name.tar
#给镜像命名加版本
docker tag image_id new_image_name:tag
#Dockerfile构建镜像
docker build -t iamge_name -f dockerfile ./
#移除镜像
docker rmi image_name
2、容器操作
容器查询、构建、交互、删除
#容器关闭、重启、容器
docker stop | restart | rm container_name
#以交互式终端启动容器
docker run -it --name [con_name] -p [psyport]:[conport] -v [psypath]:[vpath]
[image_name]
#以后台方式启动运行容器
docker run -d --name [con_name] -p [psyport]:[conport] -v [psypath]:[vpath]
[image_name]
#进入正在运行的容器以命令行的形式与容器交互
docker exec -it [con_id] /bin/bash
#容器文件拷贝至宿主机
docker cp [con_id]:[con_path] [psy_path]
#宿主机拷贝文件到容器
docker cp [psy_path] [con_id]:[con_path]
#容器自启
docker update --restart=always [con_id]
#查看容器详情
docker inspect container_name
#查看容器日志
docker logs -f -t --tail 3 container_name
#查看指定时间的日志 (查看2019-06-05 的14:14:456至14:15:06的日志)
docker logs --since='2019-06-05T14:14:45' --until='2019-06-05T14:15:06' container_name
3、批量操作
批量停止容器 、冗余清除
方式1:
docker stop $(docker ps -a | grep "key" | awk '{print $1}')
方式2:
docker ps | grep "key" | awk '{print $1}' | xargs docker stop docker
#移除状态为exited的容器
docker rm $( docker ps -qf status=exited)
#删除孤立容器
docker container prune
#磁盘清理
docker system prune --volumes
docker system prune --a
cat /dev/null /var/lib/docker/containers/*-json.log
4、容器私有网络
为了实现容器间的网络同信交互,docker提供了bridge、host、none、container四种网络模式

#查询网络
docker network ls
#创建私有网络
docker network create --driver=bridge netname
#查看网络详情
docker network inspect netname
#将容器桥接到私有网络
docker network connect netname container_name
#将容器与私有网络断开
docker network disconnect netname container_name
#删私有网络
docker network rm | prune netname
三、docker应用实操
1、springboot项目部署
✱ Dockerfile文件
FROM openjdk:8
#RUN rm -f xxx 删除镜像内文件
#COPY ./x /home/ 将文件复制到镜像指定目录
#WORDIR /data 切换到镜像的/app目录,等价 cd /app
VOLUME /home/fcw
ADD app.jar app.jar
EXPOSE 8081
ENTRYPOINT ["java","-jar","/app.jar"]
centos 时间矫正
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
unbtn时间矫正
ENV TZ=Asia/Shanghai
RUN apt update \
&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \
&& apt install tzdata \
&& apt clean \
&& apt autoclean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
✱构建脚本
#!/bin/bash
conontentPath=/home/fcw/app
dkfilePath=${conontentPath}/Dockerfile
#容器数据卷映射目录
vpath=${conontentPath}/profile/
# 容器名称
cname=app_con
# 镜像名称
iname=app_img
#私有网络名称
netname=yd
# 查找正在运行的容器ID并关闭
serverId=`docker ps -a | grep $cname | awk '{print $1}'`
if [ -z $serverId ]; then
echo "没有检测到正在运行的服务容器。开始启动新的容器......"
else
docker rm $(docker stop $serverId)
fi
#查找存在的镜像 删除旧镜像
serverId=`docker images | grep $iname | awk '{print $3}'`
if [ -z $serverId ]; then
echo "没有检测到指定的镜像......${iname}"
else
docker rmi -f $iname
fi
echo "构建所需镜像......"
docker build -t $iname -f $dkfilePath $conontentPath
if [ $? -eq 0 ]; then
echo "镜像构建完成,开始启动新容器......"
else
echo "镜像构建失败,请查看错误日志"
exit;
fi
# 启动新javaweb容器
docker run \
-d --name $cname \
--network $netname \
--network-alias $cname \
-m 2g \
-p 8081:8081 \
-v $vpath:$vpath \
--privileged=true \
$iname
serverId=`docker ps | grep $cname | awk '{print $1}'`
echo "新javaweb容器已启动,ID:$serverId, name:$cname, 网络:$netname"
2、mysql部署
✱ Dockerfile文件
FROM docker.io/mysql:8.0.25
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
RUN rm -rf /etc/mysql/my.cnf
COPY ./conf/my.cnf /etc/mysql/
✱构建容器
docker build -t mysql8 -f .
docker run \
-d --name mysql8 \
-p 3306:3306 \
-v ./data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
--privileged=true \
mysql8
3、postgressql部署
docker pull docker.io/postgres:9.3
docker run \
-d --name postgresql9 \
-p 5432:5432 \
-e POSTGRES_PASSWORD=123456 \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v ./data:/var/lib/postgresql/data \
--privileged=true \
postgres:9.3 \
4、oracle部署
docker pull docker.io/oracleinanutshell/oracle-xe-11g
docker run \
-d --name oracle-11g \
-p 1521:1521 \
-p 5500:5500 \
-e ORACLE_ALLOW_REMOTE=true \
oracle-xe-11g
账号密码
sid :xe
username: system
password: oracle
5、sqlserver部署
docker pull docker.io/exoplatform/sqlserver
docker run \
-d --name sqlserver \
-p 1433:1433 \
-e SA_PASSWORD=q!123456 \
-e SQLSERVER_DATABASE=test_app \
-e SQLSERVER_USER=wmy \
-e SQLSERVER_PASSWORD=q@123456 \
sqlserver
6、redis部署
docker pull redis:7
docker run \
docker run --privileged=true --net bridge \
-p 6379:6379 --name redis7 \
-v ./data:/data \
-v ./config/redis.conf:/etc/redis/redis.conf \
-d --restart=always redis:7 \
redis-server /etc/redis/redis.conf
7、nacos部署
docker pull nacos-registry.cn-hangzhou.cr.aliyuncs.com/nacos/nacos-server:v2.5.1
name=nacos
tag=v2.5.1
cname=${name}${tag}
custom_base64_token_secret_key=MTIzNDU2ZmVmZXF3
custom_server_identity_key=nacos-k
custom_server_identity_value=nacos-v
docker run -it \
-d --name $cname \
-p 8848:8848 \
-p 9848:9848 \
-e MODE=standalone \
-e MYSQL_SERVICE_HOST=192.168.109.200 \
-e MYSQL_SERVICE_PORT=33063 \
-e MYSQL_SERVICE_PORT=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_DATABASE_NUM=1 \
-e NACOS_AUTH_ENABLE=true \
-e NACOS_AUTH_TOKEN=${custom_base64_token_secret_key} \
-e NACOS_AUTH_IDENTITY_KEY=$custom_server_identity_key \
-e NACOS_AUTH_IDENTITY_VALUE=$custom_server_identity_value \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e JVM_XMN=64M \
-v ./data/logs:/home/nacos/logs \
--privileged=true \
${name}:${tag}
本文详细介绍如何使用Docker部署SpringBoot项目,包括Dockerfile编写、镜像构建与运行、容器管理及网络配置,同时提供实用的Shell脚本简化部署流程。
1336






