docker使用教程

本文详细介绍如何使用Docker部署SpringBoot项目,包括Dockerfile编写、镜像构建与运行、容器管理及网络配置,同时提供实用的Shell脚本简化部署流程。

 一、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}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值