CICD之docker(linux版)
- 01安装docker(本文使用centos方式)
- 02 docker基本操作
- 2.1docker image
- 2.2 docker containner
- 2.3 共享images
- 03 network
- 04 volume
- 1. 介绍
- 2. 相关操作
- 05 dockerfile
- 06 docker compose
- 6.1 docker-compose 简介
- 6.2 docker-compose安装
- 6.3 docker-compose使用
01安装docker(本文使用centos方式)
- window安装链接:https://docs.docker.com/desktop/windows/install/
- centos安装链接:https://docs.docker.com/engine/install/centos/
- ubuntu安装链接:https://docs.docker.com/engine/install/ubuntu/
1. 如原来安装有docker,先使用以下命令进行删除
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2. 用以下命令设置仓库
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
3. 设置稳定的仓库
- 官方地址
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 阿里云地址
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 清华大学源
sudo yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
我选择的是阿里云地址
4.安装docker
sudo yum install docker-ce docker-ce-cli containerd.io
5. 启动docker
sudo systemctl start docker
6. 查看docker是否安装成功,如出现Hello from Docker!代表成功安装
- 命令1:sudo docker run hello-world 运行docker
- 命令2:sudo docker info 查看docke信息 出现如图信息代表一样安装成功
- 命令3:sudo docker version 查看docker版本
6. 把当前用户添加到docker中,每次运行不需再加sudo命令 命令格式:sudo usermod -aG docker 用户名
- 命令1:sudo usermod -aG docker $USER
- 命令2:sudo usermod -aG docker $LOGNAME
7.配置docker加速器
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://42gqwhu1.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
8.卸载docker
- 卸载docker服务端、客户端和容器sudo yum remove docker-ce docker-ce-cli containerd.io
- 主机上的映像、容器、卷或自定义配置文件不会被自动删除。 删除所有镜像、容器和卷。
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
02 docker基本操作
2.1docker image
1.docker帮助文档
- docker image --help
2. 拉取仓库镜像命令
- docker pull 镜像版本名
- 3. 查看镜像
- docker images
- 仅列出镜像的ID:docker images -q
- 4. 查看镜像版本
5. 运行镜像
- docker run -dit 镜像版本名:标签名 /bin/bash
6. 删除镜像
- docker image rm 镜像版本号:标签名 通过镜像名:标签名方式
- docker image rm image ID 通过镜像id
- docer image rmi REPOSITORY:TAG|image ID 删除一个或多个镜像
7. 查看镜像详细信息
- docker inspect 镜像名
2.2 docker containner
- 查看帮助:docker container run --help | sed -nr '/\-d,|\-i,|\-t,|\-v,|\-p,|\-P,/p'
2. 运行容器
- docker run iamge
- docker container run --name 容器名称 -v 宿主机目录:容器目录 -d -P 宿主机端口:映射端口 镜像名称
- -d 后台运行
- -it 交互运行
- -P 映射端口
- -v 文件映射,数据同步,动态更新
3.退出容器
- exit
3. 列出容器
- 列出当前运行容器:docker ps
- 列出系统中所有容器:docker ps -a
- 列出容器上运行的所有历史命令:sudo docker history centos
4. 查看容器进程和资源利用情况
- 查看容器进程:docker top ContainerID
- 查看容器的资源利用情况:docker stats ContainerID
5. 停止/重启容器
- docker stop containerID
- docker restart 容器名(容器id)
6. 暂停/启动容器
- docker pause 容器名称(id)
- docker unpause 容器名称(id)
7. 删除容器
- 删除一个未运行容器(先停止容器才能删除):docker rm containerID
- 删除一个正在运行容器(强制删除): docker rm -f containerID
- 8. 下载Jenkins容器
- docker run --name myjenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins_home jenkins
9. 进入容器
- docker exec -it 容器名 /bin/bash
2.3 共享images
1. 上传image到Docker Repository
- 登录: docker login
- 推送
docker build -t 用户名/仓库名:标签名 .
docker push 用户名/仓库名:标签名
2. 导出为压缩文件,再导入
- 导出为压缩文件:docker save -o 压缩包名.tar 镜像名:标签名
- 导入压缩文件: docker load -i 压缩名包名.tar
03 network
1. bridge
- nat 网络类型
- 虚拟交换机
2. host
- 与宿主机共享网络
- –net=host
3.none
- 不配置网络:--net=none
4.overlay
- 不同网络进行通信
- 与一个容器共享网络:--net=container:ContainerName
5.相关操作
- docker network --help 网络配置帮助文档
- docker run -dit 镜像名 --network host 用户名 /bin/bash
04 volume
1. 介绍
- 使用数据卷实现数据持久化
- 数据备份/数据共享
2. 相关操作
1.查看帮忙文档
- docker volume --help
- docker volume create --help
2. 创建
- docker volume create [OPTIONS] [VOLUME]
3. 查看
docker volume inspect [OPTIONS] VOLUME [VOLUME...]
4. 挂载
docker run -v 宿主机目录:容器目录
5. 删除
docker volume rm [OPTIONS] VOLUME [VOLUME...]
05 dockerfile
1. dockerfile帮助信息
- docker image build --help
2. FROM
- 指明base image(在哪一个image的基础上创建)
- 强制的
3. LABEL
- 指明dockerfile的作者
- 不执行的命令
4. RUN
- 在已存在的image顶层执行命令,创建一个新的layer层
- 往往将需要安装的依赖,使用一个RUN来创建
RUN apt-get update && apt-get install -y \
nginx
5. ENV
- 在容器内创建环境变量
ENV username=jsonLiu \
password=123456
6. COPY 复制目录/文件到容器中
7. ADD
- 跟COPY类似
- 额外属性
- 能解压压缩文件,然后复制到容器中
- 能远程下载 ADD http://www.jsonLiu.site/xxx.tar.xz /usr/src
8. WORKDIR
- 切换目录
9. USER
- 设置运行其他用户命令
- urser root
10.VOLUME
- 指定需要持久保存的目录(数据备份)VOLUME /data
11. ENTRYPOINT vs CMD不同点
- CMD
- 运行容器时,不加任何参数,会自动执行CMD,如果添加参数则会忽略CMD
- 如果有多个CMD,只有最后一个会被执行,其他都会被忽略
- 可以给ENTRYPOINT传参(CMD ["param1","param2"],如果ENTRYPOINT使用shell format,CMD会被忽略)
- ENTRYPOINT
- 运行容器时,如果添加参数不会忽略ENTRYPOINT
相同点
- 只有1个CMD或者ENTRYPOINT时,两者无区别
- shell格式和exec格式
12.完整案例
06 docker compose
6.1 docker-compose 简介
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
- Compose 使用的三个步骤:
- 使用 Dockerfile 定义应用程序的环境。
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
6.2 docker-compose安装
1. 安装
- 下载github二进制包:
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
- 将可执行权限应用于二进制文件
sudo chmod +x /usr/local/bin/docker-compose
- 创建软链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
- 测试是否安装成功
docker-compose --version
2. 帮助信息
- docker compose --help
6.3 docker-compose使用
1. 创建测试脚本app.py
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
2. 创建 Dockerfile 文件:
# 从 Python 3.7 映像开始构建镜像
FROM python:3.7-alpine
# 将工作目录设置为 /code
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
# 安装 gcc,以便诸如 MarkupSafe 和 SQLAlchemy 之类的 Python 包可以编译加速
RUN apk add --no-cache gcc musl-dev linux-headers
# 复制 requirements.txt 并安装 Python 依赖项
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
# 将 . 项目中的当前目录复制到 . 镜像中的工作目录
COPY . .
# 启动应用服务
CMD ["flask", "run"]
**3.**创建 docker-compose.yml
# version指定本 yml 依从的 compose 哪个版本制定的。
version: '3'
services:
# 容器1
web:
# build指定为构建镜像上下文路径:在当前路径下,查找Dockerfile文件,自动进行build操作
build: .
# context:上下文路径。
context: ./docker_compose
# dockerfile:指定构建镜像的 Dockerfile 文件名。
dockerfile: Dockerfile
# args:添加构建参数,这是只能在构建过程中访问的环境变量。
args:
buildno: 1
# labels:设置构建镜像的标签。
labels:
- "a"
- "b"
- "c"
# target:多层构建,可以指定构建哪一层。
# taget: prod
# 端口映射
ports:
- "5000:5000"
# 容器2
redis:
# docker hub拉去镜像
image: "redis:alpine"
4. 运行:
- docker-compose up -d
- -d:在后台运行 docker官方链接:https://docs.docker.com/ 菜鸟教程:https://www.runoob.com/docker/docker-tutorial.html