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方式)

  1. window安装链接:https://docs.docker.com/desktop/windows/install/
  2. centos安装链接:https://docs.docker.com/engine/install/centos/
  3. 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

docker 部署极狐GitLab默认root密码_标签名

2. 用以下命令设置仓库

sudo yum install -y yum-utils \
	 device-mapper-persistent-data \
	 lvm2

docker 部署极狐GitLab默认root密码_docker_02

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

我选择的是阿里云地址

docker 部署极狐GitLab默认root密码_centos_03

4.安装docker

sudo yum install docker-ce docker-ce-cli containerd.io

5. 启动docker

sudo systemctl start docker

docker 部署极狐GitLab默认root密码_centos_04

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
  • docker 部署极狐GitLab默认root密码_标签名_05

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

docker 部署极狐GitLab默认root密码_标签名_06

docker 部署极狐GitLab默认root密码_标签名_07

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基本操作

docker 部署极狐GitLab默认root密码_标签名_08

docker 部署极狐GitLab默认root密码_centos_09

2.1docker image

1.docker帮助文档

  • docker image --help
  • docker 部署极狐GitLab默认root密码_linux_10

2. 拉取仓库镜像命令

  • docker pull 镜像版本名
  • docker 部署极狐GitLab默认root密码_centos_11

  • 3. 查看镜像
  • docker images
  • 仅列出镜像的ID:docker images -q
  • docker 部署极狐GitLab默认root密码_centos_12

  • 4. 查看镜像版本
  • docker 部署极狐GitLab默认root密码_docker_13

5. 运行镜像

  • docker run -dit 镜像版本名:标签名 /bin/bash
  • docker 部署极狐GitLab默认root密码_docker_14

6. 删除镜像

  • docker image rm 镜像版本号:标签名 通过镜像名:标签名方式
  • docker image rm image ID 通过镜像id
  • docer image rmi REPOSITORY:TAG|image ID 删除一个或多个镜像

7. 查看镜像详细信息

  • docker inspect 镜像名
  • docker 部署极狐GitLab默认root密码_标签名_15

2.2 docker containner

  1. 查看帮助:docker container run --help | sed -nr '/\-d,|\-i,|\-t,|\-v,|\-p,|\-P,/p'
  2. docker 部署极狐GitLab默认root密码_容器_16

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
  • docker 部署极狐GitLab默认root密码_centos_17

4. 查看容器进程和资源利用情况

  • 查看容器进程:docker top ContainerID
  • 查看容器的资源利用情况:docker stats ContainerID
  • docker 部署极狐GitLab默认root密码_centos_18

5. 停止/重启容器

  • docker stop containerID
  • docker restart 容器名(容器id)

6. 暂停/启动容器

  • docker pause 容器名称(id)
  • docker unpause 容器名称(id)

7. 删除容器

  • 删除一个未运行容器(先停止容器才能删除):docker rm containerID
  • 删除一个正在运行容器(强制删除): docker rm -f containerID
  • docker 部署极狐GitLab默认root密码_容器_19

  • 8. 下载Jenkins容器
  • docker run --name myjenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins_home jenkins

9. 进入容器

  • docker exec -it 容器名 /bin/bash
  • docker 部署极狐GitLab默认root密码_标签名_20

2.3 共享images

1. 上传image到Docker Repository

  • 登录: docker login
  • 推送
docker build -t 用户名/仓库名:标签名 .
docker push 用户名/仓库名:标签名

2. 导出为压缩文件,再导入

  • 导出为压缩文件:docker save -o 压缩包名.tar 镜像名:标签名
  • 导入压缩文件: docker load -i 压缩名包名.tar
  • docker 部署极狐GitLab默认root密码_容器_21

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
  • docker 部署极狐GitLab默认root密码_linux_22

  • docker 部署极狐GitLab默认root密码_centos_23

04 volume

1. 介绍

  • 使用数据卷实现数据持久化
  • 数据备份/数据共享

2. 相关操作

1.查看帮忙文档

  • docker volume --help
  • docker volume create --help
  • docker 部署极狐GitLab默认root密码_centos_24

  • docker 部署极狐GitLab默认root密码_标签名_25

2. 创建

  • docker volume create [OPTIONS] [VOLUME]
  • docker 部署极狐GitLab默认root密码_linux_26

3. 查看

docker volume inspect [OPTIONS] VOLUME [VOLUME...]

docker 部署极狐GitLab默认root密码_centos_27

4. 挂载

docker run -v 宿主机目录:容器目录

docker 部署极狐GitLab默认root密码_容器_28

5. 删除

docker volume rm [OPTIONS] VOLUME [VOLUME...]

docker 部署极狐GitLab默认root密码_标签名_29

05 dockerfile

1. dockerfile帮助信息

  • docker image build --help
  • docker 部署极狐GitLab默认root密码_linux_30

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.完整案例

docker 部署极狐GitLab默认root密码_标签名_31

docker 部署极狐GitLab默认root密码_linux_32

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

docker 部署极狐GitLab默认root密码_标签名_33

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