[豪の学习笔记] CI/CD相关 - Docker
一、docker常见命令
单独下载镜像文件 docker pull
查看本地镜像文件 docker images
删除本地镜像文件 docker rmi
基于dockerfile构建自定义镜像 docker build
将打包好的镜像保存在本地 docker save
加载外部镜像文件 docker load
将本地镜像推送到镜像仓库 docker push
创建并运行容器 docker run
停止容器 docker stop
启动容器 docker start
查看当前容器运行状态 docker ps
删除容器 docker rm
查看容器运行日志 docker log
进入容器 docker exec
详细命令见于Docker官方文档Reference中Command-line reference部分
案例
查看DockerHub,拉取Nginx镜像,创建并运行Nginx容器
①在DockerHub中搜索Nginx镜像,查看镜像名称
https://hub.docker.com/_/nginx
②拉取Nginx镜像
docker pull nginx
③查看本地镜像列表
docker images
保存镜像文件到本地 docker save -o nginx.tar nginx:latest
读取本地镜像文件 docker load -i nginx.tar
④创建并运行Nginx容器
docker run -d --name nginx -p 80:80 nginx
⑤查看容器状态
docker ps
改变输出格式 docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
⑥停止容器
docker stop nginx
⑦再次启动容器
docker start nginx
⑧进入Nginx容器
docker exec -it nginx bash
⑨删除容器
先停止才能删除 docker rm nginx
强制删除 docker rm nginx -f
二、命名别名
修改/root/.bashrc文件 vi /root/.bashrc
退出: 先按住esc 再输入:wq
执行命令使别名生效 source /root/.bashrc
三、数据卷挂载
数据卷是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁,它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器产生的数据
创建数据卷 docker volume create
查看所有数据卷 docker volume ls
删除指定数据卷 docker volume rm
查看某个数据卷的详情 docker volume inspect
清除未使用数据卷 docker volume prune
PS:
在执行docker run命令时,使用 -v 数据卷:容器内目录 可以完成数据卷挂载
当创建容器时,若挂载了数据卷且数据卷不存在,则会自动创建数据卷
案例
利用Nginx容器部署静态资源
所有的镜像文件都是最小化系统环境,只包含对应运行必备的函数库,故需要挂载数据卷
①创建Nginx容器
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
②修改Nginx容器内html目录下的index.html文件,查看变化
③将静态资源部署到Nginx的html目录
利用数据卷,实现了宿主机目录与容器内目录之间的自动双向映射
四、本地目录挂载
案例
mysql容器的数据挂载
①查看mysql容器,判断是否有数据卷挂载
docker inspect mysql
匿名卷,名字随机生成,容易丢失数据
②基于宿主机目录实现MySQL数据目录、配置文件、初始化脚本的挂载(查询官方文档)
a.挂载/root/mysql/data到容器内的/var/lib/mysql目录
b.挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录,携带SQL脚本
c.挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录,携带配置文件
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v ./mysql/data:/var/lib/mysql \
-v ./mysql/conf:/etc/mysql/conf.d \
-v ./mysql/init:/docker-entrypoint-initdb.d \
mysql
PS:
在执行docker run命令时,使用 -v 本地目录:容器内目录 可以完成本地目录挂载
本地目录必须以“/”或“./”开头,如果直接以名称开头,会被识别为数据卷而非本地目录
-v mysql:/var/lib/mysql 会被识别为一个数据卷叫mysql
-v ./mysql:/var/lib/mysql 会被识别为当前目录下的一个mysql目录
五、自定义镜像
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。
部署一个JAVA应用的步骤:
①准备一个Linux服务器
②安装JRE并配置环境变量
③拷贝jar包
④运行jar包
构建一个JAVA镜像的步骤:
①准备一个Linux服务器
②安装JRE并配置环境变量
③拷贝jar包
④编写运行脚本
docker在制作镜像的时候,不是把每一步产生的文件合并在一起打成一个包作为镜像,而是会把每一步操作产生的文件分别打成压缩包作为镜像的一部分,最终合在一起才是一个完整的镜像
Dockerfile
dockerfile就是一个文本文件,其中包含一个个的指令,用指令来说明要执行什么操作来构建镜像。
FROM 指定基础镜像 FROM centos:6
ENV 设置环境变量,可在后面指令使用 ENV key value
COPY 拷贝本地文件到镜像的指定目录 COPY ./jrell.tar.gz /tmp
RUN 执行Linux的shell命令,一般是安装过的命令 RUN tar -zxvf /tmp/jre11.tar.gz&& EXPORTS path=/tmp/jre11:$path
EXPOSE 指定容器运行时监听的端口,给镜像使用者看 EXPOSE 8080
ENTRYPOINT 镜像中应用的启动命令,容器运行时调用 ENTRYPOINT java -jar xx.jar
更多详细语法在官方文档 https://docs.docker.com/engine/reference/builder
镜像中包含了应用程序所需要的运行环境,函数库,配置,以及应用本身等各种文件,这些文件分层打包而成
Dockerfile就是利用固定的指令来描述镜像的结构和构建过程,这样Docker才可以依次来构建镜像
构建镜像 docker build -t 镜像名 Dockerfile目录
六、容器网络互联
默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上
一旦创建自定义网络,它会形成一个新的网桥,网段与初始网桥不一样
加入自定义网络的容器才可以通过容器名互相访问
创建一个网络 docker network create
查看所有网络 docker network ls
删除指定网络 docker network rm
清除未使用的网络 docker network prune
使指定容器连接加入某网络 docker network connect
使指定容器连接离开某网络 docker network disconnect
查看网络详细信息 docker network inspect