一、Docker
docker安装
https://docs.docker.com/get-docker/
https://docs.docker.com/engine/install/centos/
a. 卸载旧版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
上面卸载不干净,使用下面的
首先停止运行docker服务
systemctl stop docker
查询
[root@bogon ~]# yum list installed |grep docker
containerd.io.x86_64 1.4.12-3.1.el7 @docker-ce-stable
docker-ce.x86_64 3:20.10.12-3.el7 @docker-ce-stable
docker-ce-cli.x86_64 1:20.10.12-3.el7 @docker-ce-stable
docker-ce-rootless-extras.x86_64 20.10.12-3.el7 @docker-ce-stable
docker-scan-plugin.x86_64 0.12.0-3.el7 @docker-ce-stable
[root@bogon ~]# rpm -qa |grep docker
docker-scan-plugin-0.12.0-3.el7.x86_64
docker-ce-rootless-extras-20.10.12-3.el7.x86_64
docker-ce-cli-20.10.12-3.el7.x86_64
docker-ce-20.10.12-3.el7.x86_64
卸载yum list installed |grep docker查询的所有
[root@bogon ~]# yum -y remove containerd.io.x86_64 docker-ce.x86_64 docker-ce-cli.x86_64 docker-ce-rootless-extras.x86_64 docker-scan-plugin.x86_64
再查就没有了
[root@bogon ~]# yum list installed|grep docker
[root@bogon ~]# rpm -qa |grep docker
b. 安装docker
1、查询可安装的版本
yum list docker-ce --showduplicates | sort -r
2、使用阿里云安装docker
https://developer.aliyun.com/mirror/docker-ce
3、使用存储库安装docker(官方文档)
# 设置存储库
# 安装yum-utils包(提供yum-config-manager 实用程序)并设置稳定存储库。
$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 安装最新版本的 Docker Engine 和 containerd
$ sudo yum install docker-ce docker-ce-cli containerd.io
# 启动docker
$ sudo systemctl start docker
# 通过运行hello-world 映像验证 Docker Engine 是否已正确安装。
$ sudo docker run hello-world
# 开机定时启动docker
$ sudo systemctl enable docker
# 关闭docker服务
$ sudo systemctl stop docker
# 重启docker服务
$ sudo systemctl restart docker
验证
[root@WzcWyt ~]# docker version
Client: Docker Engine - Community
Version: 20.10.12
API version: 1.41
Go version: go1.16.12
Git commit: e91ed57
Built: Mon Dec 13 11:45:22 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.12
API version: 1.41 (minimum version 1.12)
Go version: go1.16.12
Git commit: 459d0df
Built: Mon Dec 13 11:43:44 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.12
GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc:
Version: 1.0.2
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
c. Docker配置国内镜像源
[root@bogon ~]# vi /etc/docker/daemon.json
在文件内添加
Docker中国区官方镜像:
https://registry.docker-cn.com
网易:
http://hub-mirror.c.163.com
中国科技大学:
https://docker.mirrors.ustc.edu.cn
阿里云:
https://cr.console.aliyun.com/
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"https://cr.console.aliyun.com/"
]
}
保存后重启 Docker 以使配置生效
[root@bogon ~]# systemctl restart docker
1. Docker缺点
- docker不适合做后台端操作系统兼容性测试,例如:centos6、centos7的兼容
- docker不适合挑内核场景,例如:编译C++
2. Docker加速器
参考https://www.cnblogs.com/atuotuo/p/6264800.html
a. 登录阿里开发者平台
https://dev.aliyun.com/search.html
https://promotion.aliyun.com/ntms/act/kubernetes.html
b. 搜索docker
这里可以看到,系统已经为我们生成了一个专属加速器地址:https://xxxxx.mirror.aliyuncs.com
c. 根据个人需要, 选择运行Docker 的OS,按照要求修改Docker配置文件
$ vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
# 重新加载配制
$ sudo systemctl daemon-reload
# 重新启动服务
$ sudo systemctl restart docker
3. Dockerhub镜像库
https://hub.docker.com/
4. Docker查询镜像及指定版本号安装
查询镜像:
docker search jenkins
指定版本安装:
docker pull mysql:5.7
5. Docker镜像重新打版本、重新命名
[root@WzcWyt ~]# docker tag mysql:5.7 mysql:5.7.1
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
[root@WzcWyt ~]# docker images | grep mysql
docker.io/library/mysql 5.7 738e7101490b 13 days ago 454 MB
localhost/mysql 5.7.1 738e7101490b 13 days ago 454 MB
[root@WzcWyt ~]# docker tag mysql:5.7 mysqlmynew
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
[root@WzcWyt ~]# docker images|grep mysql
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
docker.io/library/mysql 5.7 738e7101490b 13 days ago 454 MB
localhost/mysql 5.7.1 738e7101490b 13 days ago 454 MB
localhost/mysqlmynew latest 738e7101490b 13 days ago 454 MB
[root@WzcWyt ~]#
6. Docker保存镜像
docker save nginx > nginx.tar
7.Docker上传镜像
docker load < nginx.tar
8. 启动Docker容器
--name 指定容器名称
-d 后台运行
-port 指定端口映射规则
--network 指定容器运行的网路模式
-v 指定需要挂载的数据卷(用法:-v 宿主机目录:容器目录),宿主机上的目录,防止删除容器后数据消失,有新容器后可以直接挂载使用
-env 指定需要传递给容器的环境变量
-e 向容器内传递环境变量
-i 即使未连接,也保持标准DIN打开
-t 为容器分配一个伪TTY
docker run --name myjenkins -d -p 8080:8080 -v /home/suzhuji/jenkins_data:/var/jenkins jenkins/jenkins
9. 查看当前运行的容器
docker ps
docker ps -a
docker ps | grep mysql
10. 查看当前运行的容器占用的内存
docker ps -s
11. 强制删除运行中的容器
docker rm -f myjenkins
12. 查看容器日志
docker logs -f myjenkins
13. Docker查看帮助
docker --help
docker run --help
14. 进入容器交互
docker exec -it myjenkins bash
15. 让容器运行一条命令
docker exec myjenkins ping www.baidu.com
16. 列出所有容器的源信息,容器出错时使用
docker inspect myjenkins
17. 显示系统信息
docker info
18. 将容器内的文件复制到宿主机
docker cp myjenkins:/home/file.txt /home/test
docker cp /home/test myjenkins:/home/file.txt
19. 如何存储数据,msyql为例
https://hub.docker.com/,搜索官方镜像,找到存储路径
Docker命令
用法:
docker [选项] [命令]
选项:
选项 | 描述 |
---|---|
--cgroup-manager string | 要使用的Cgroup manager(“cgroupfs”|“systemd”)(默认为“systemd”) |
--cni-config-dir string | CNI网络配置目录的路径(默认值“/usr/libexec/CNI”) |
--conmon string | 康蒙二进制的路径 |
-c, --connection string | 用于远程播客服务的连接 |
--events-backend string | 要使用的事件后端(“文件”|“日志”|“无”)(默认为“文件”) |
--help | 帮助播客 |
--hooks-dir strings | 设置OCI挂钩目录路径(可以多次设置)(默认值[/usr/share/containers/OCI/hooks.d]) |
--identity string | SSH标识文件的路径(容器\u SSHKEY) |
--log-level string | 记录高于指定级别的消息(跟踪、调试、信息、警告、警告、错误、致命、死机)(默认为“警告”) |
--namespace string | 设置libpod名称空间,用于在系统上创建容器和pod的单独视图 |
--network-cmd-path string | 用于配置网络的命令的路径 |
-r, --remote | 访问远程播客服务(默认为false) |
--root string | 存储数据(包括图像)的根目录的路径 |
--runroot string | 存储所有状态信息的“运行目录”的路径 |
--runtime string | 用于运行容器的OCI兼容二进制文件的路径,默认为/usr/bin/runc |
--runtime-flag stringArray | 为容器运行时添加全局标志 |
--storage-driver string | 选择用于管理图像和容器存储的存储驱动程序(默认为overlay) |
--storage-opt stringArray | 用于将选项传递给存储驱动程序 |
--syslog | 将日志信息输出到syslog和控制台(默认为false) |
--tmpdir string | libpod状态内容的tmp目录的路径。 注意:使用环境变量“TMPDIR”更改容器映像的临时存储位置“/var/tmp”。 |
--url string | 访问Podman服务(容器主机)的URL(默认为“unix:/run/Podman/Podman.sock”) |
-v, --version | 版本 |
可用命令:
命令 | 描述 |
---|---|
attach | 连接到运行的容器上 |
auto-update | 根据容器的自动更新策略自动更新容器 |
build | 使用ContainerFile中的说明构建映像 |
commit | 基于更改的容器创建新图像 |
container | 管理容器 |
cp | 在容器和本地文件系统之间复制文件/文件夹 |
create | 创建但不启动容器 |
diff | 显示对对象文件系统的更改 |
events | 显示播客事件 |
exec | 在正在运行的容器中运行进程 |
export | 将容器的文件系统内容导出为tar归档 |
generate | 基于容器、吊舱或卷生成结构化数据。 |
healthcheck | 管理容器的健康检查 |
help | 关于任何命令的帮助 |
history | 显示指定图像的历史记录 |
image | 管理图像 |
images | 列出本地存储中的图像 |
import | 导入tarball以创建文件系统映像 |
info | 显示播客系统信息 |
init | 初始化一个或多个容器 |
inspect | 显示由ID表示的对象的配置 |
kill | 使用特定信号杀死一个或多个正在运行的容器 |
load | 从tar存档加载图像 |
login | 登录到容器注册表 |
logout | 注销容器注册表 |
logs | 获取一个或多个容器的日志 |
machine | 管理虚拟机 |
manifest | 操作清单列表和图像索引 |
mount | 装载工作容器的根文件系统 |
network | 管理网络 |
pause | 暂停一个或多个容器中的所有进程 |
play | 播放结构化文件中的容器、播客或卷。 |
pod | 管理豆荚 |
port | 列出容器的端口映射或特定映射 |
ps | 列出容器 |
pull | 从注册表中提取图像 |
push | 将图像推送到指定的目标 |
rename | 重命名现有容器 |
restart | 重新启动一个或多个容器 |
rm | 移除一个或多个容器 |
rmi | 从本地存储中删除一个或多个映像 |
run | 在新容器中运行命令 |
save | 将图像保存到存档 |
search | 在注册表中搜索图像 |
secret | 管理秘密 |
start | 启动一个或多个容器 |
stats | 显示容器资源使用统计信息的实时流 |
stop | 停止一个或多个容器 |
system | 管理播客 |
tag | 向本地映像添加其他名称 |
top | 显示容器的运行进程 |
unmount | 卸载工作容器的根文件系统 |
unpause | 在一个或多个容器中取消暂停进程 |
unshare | 在修改的用户命名空间中运行命令 |
untag | 从本地映像中删除名称 |
version | 显示播客版本信息 |
volume | 管理卷 |
wait | 在一个或多个容器上阻塞 |
Docker run文档
说明:
从给定图像在新容器中运行命令
用法:
docker run [选项] 图像 [命令[ARG…]]
示例:
podman run imageID ls -alF /etc
podman run --network=host imageID dnf -y install java
podman run --volume /var/hostdir:/var/ctrdir -i -t fedora /bin/bash
选项:
选项 | 描述 |
---|---|
--add-host strings | 添加自定义主机到IP映射(主机:IP)(默认值[]) |
--annotation strings | 向容器添加批注(键:值) |
--arch ARCH | 使用ARCH而不是机器的架构来选择图像 |
-a, --attach strings | 连接到标准输入、标准输出或标准输出 |
--authfile string | 身份验证文件的路径。使用REGISTRY_AUTH_FILE环境变量覆盖 |
--blkio-weight string | 块IO权重(相对权重)接受介于10和1000之间的权重值。 |
--blkio-weight-device DEVICE_NAME:WEIGHT | 块IO重量(相对设备重量,格式:设备名称:重量) |
--cap-add strings | 向容器添加功能 |
--cap-drop strings | 从容器中删除功能 |
--cgroup-conf strings | 配置cgroup v2(键=值) |
--cgroup-parent string | 容器的可选父cgroup |
--cgroupns string | 要使用的cgroup命名空间 |
--cgroups string | 控件容器cgroup配置(“已启用”|“已禁用”|“无conmon”|“拆分”)(默认为“已启用”) |
--cidfile string | 将容器ID写入文件 |
--conmon-pidfile string | 将接收conmon PID的文件的路径 |
--cpu-period uint | 限制CPU CFS(完全公平调度程序)周期 |
--cpu-quota int | 限制CPU CFS(完全公平调度程序)配额 |
--cpu-rt-period uint | 以微秒为单位限制CPU实时周期 |
--cpu-rt-runtime int | 以微秒为单位限制CPU实时运行时间 |
--cpu-shares uint | CPU份额(相对权重) |
--cpus float | CPU的数量。默认值为0.000,表示没有限制 |
--cpuset-cpus string | 允许执行的CPU(0-3,0,1) |
--cpuset-mems string | 允许执行的内存节点(MEMs)(0-3,0,1)。仅对NUMA系统有效。 |
-d, --detach | 在后台运行容器并打印容器ID |
--detach-keys [a-Z] | 覆盖用于分离容器的键序列。Format是单个字符[a-Z]或用逗号分隔的序列ctrl-<value> ,其中 <value> 是 a-cf , @ , ^ , [ , \ , ] , ^ 或 _ 之一(默认为"ctrl-p,ctrl-q") |
--device strings | 将主机设备添加到容器中 |
--device-cgroup-rule strings | 将规则添加到cgroup allowed devices列表 |
--device-read-bps strings | 限制设备的读取速率(字节/秒)(例如–device read bps=/dev/sda:1mb) |
--device-read-iops strings | 限制设备的读取速率(IO/秒)(例如——设备读取iops=/dev/sda:1000) |
--device-write-bps strings | 限制对设备的写入速率(字节/秒)(例如–device write bps=/dev/sda:1mb) |
--device-write-iops strings | 限制对设备的写入速率(IO/秒)(例如–device write iops=/dev/sda:1000) |
--disable-content-trust | 这是一个特定于Docker的选项,是一个NOOP |
--dns strings | 设置自定义DNS服务器 |
--dns-opt strings | 设置自定义DNS选项 |
--dns-search strings | 设置自定义DNS搜索域 |
--entrypoint string | 覆盖图像的默认入口点 |
-e, --env stringArray | 在容器中设置环境变量(默认[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin,TERM=xterm]) |
--env-file strings | 读入环境变量文件 |
--env-host | 使用容器中的所有当前主机环境变量 |
--expose strings | 公开一个端口或一系列端口 |
--gidmap strings | 用于用户命名空间的GID映射 |
--group-add strings | 将其他组添加到主容器进程。”“保留组”允许容器进程使用补充组。 |
--health-cmd string | 为容器设置healthcheck命令(“无”禁用现有healthcheck) |
--health-interval string | 设置健康检查的时间间隔(禁用值导致无自动计时器设置)(默认值为“30s”) |
--health-retries uint | 健康检查被视为不健康之前允许的重试次数(默认值3) |
--health-start-period string | 容器引导所需的初始化时间(默认值为“0”) |
--health-timeout string | 在间隔被视为失败之前完成健康检查所允许的最长时间(默认值为“30秒”) |
-h, --hostname string | 设置容器主机名 |
--http-proxy | 基于主机代理变量在容器中设置代理环境变量(默认为true) |
--image-volume string | 告诉podman如何处理内置映像卷(“绑定” |
--init | 在容器内运行一个init二进制文件,它转发信号并接收进程 |
--init-path string | 容器初始化二进制文件的路径 |
-i, --interactive | 即使未连接,也保持标准DIN打开 |
--ip string | 指定容器的静态IPv4地址 |
--ipc string | 要使用的IPC命名空间 |
--kernel-memory <number>[<unit>] | 内核内存限制(格式:<number>[<unit>],其中unit=b(字节)、k(千字节)、m(兆字节)或g(千兆字节)) |
-l, --label stringArray | 在容器上设置元数据 |
--label-file strings | 读入以行分隔的标签文件 |
--log-driver string | 容器的日志驱动程序(默认为“k8s文件”) |
--log-opt strings | 日志驱动程序选项 |
--mac-address string | 容器MAC地址(例如92:d0:c6:0a:29:33) |
-m, --memory <number>[<unit>] | 内存限制(格式:<number>[<unit>],其中单位=b(字节)、k(千字节)、m(兆字节)或g(千兆字节)) |
--memory-reservation [] | 内存软限制(格式:<number>[<unit>],其中单位=b(字节)、k(千字节)、m(兆字节)或g(千兆字节)) |
--memory-swap string | 交换限制等于内存加交换:’-1’以启用无限制交换 |
--memory-swappiness int | 调整容器内存交换(0到100,或系统默认值为-1)(默认值为-1) |
--mount stringArray | 将文件系统装载附加到容器 |
--name string | 为容器指定一个名称 |
--network string | 将容器连接到网络(默认为“网桥”) |
--network-alias strings | 为容器添加网络范围的别名 |
--no-healthcheck | 禁用容器上的健康检查 |
--no-hosts | 不要在容器中创建/etc/hosts,而是使用映像中的版本 |
--oom-kill-disable | 禁用OOM杀手 |
--oom-score-adj int | 调整主机的OOM首选项(-1000到1000) |
--os OS | 使用操作系统而不是运行操作系统来选择图像 |
--pid string | 要使用的PID命名空间 |
--pidfile string | 将容器进程ID写入文件 |
--pids-limit int | 调整容器pids限制(设置0表示无限制,设置1表示服务器默认值)(默认值2048) |
--platform string | 指定用于选择图像的平台。(与--arch和--os冲突) |
--pod string | 在现有吊舱中运行容器 |
--pod-id-file string | 从文件中读取pod ID |
--preserve-fds uint | 将多个附加文件描述符传递到容器中 |
--privileged | 为容器授予扩展权限 |
-p, --publish strings | 将容器的端口或一系列端口发布到主机(默认值[]) |
-P, --publish-all | 将所有公开端口发布到主机接口上的随机端口 |
--pull string | 创建前拉取图像(“始终”|“缺少”|“从不”)(默认为“缺少”) |
-q, --quiet | 拉取图像时抑制输出信息 |
--read-only | 使容器根文件系统只读 |
--read-only-tmpfs | 在只读模式下运行容器时,在/run、/tmp和/var/tmp上装载读写tmpfs(默认为true) |
--replace | 如果存在同名容器,请将其替换 |
--requires strings | 添加一个或多个必须在启动此容器之前启动的需求容器 |
--restart string | 当容器退出时应用的重新启动策略(“总是”|“否”|“失败时”|“除非停止”) |
--rm | 退出后移除容器(和吊舱,如果已创建) |
--rmi | 删除容器图像,除非其他容器使用 |
--rootfs | 第一个参数不是图像,而是分解容器的rootfs |
--sdnotify string | 控件sd通知行为(“容器”|“conmon”|“忽略”)(默认为“容器”) |
--seccomp-policy string | 选择seccomp配置文件的策略(实验)(默认为“默认”) |
--secret stringArray | 将机密添加到容器 |
--security-opt stringArray | 安全选项 |
--shm-size <number>[<unit>] | /dev/shm的大小(格式:<number>[<unit>],其中单位=b(字节)、k(千字节)、m(兆字节),或g(千兆字节))(默认值为“65536k”) |
--sig-proxy | 代理接收到进程的信号(默认为true) |
--stop-signal string | 发出停止集装箱的信号。默认为SIGTERM |
--stop-timeout uint | 用户命令停止的容器必须退出的超时(秒)。如果超过,容器将通过SIGKILL强制停止。(默认值为10) |
--subgidname string | /etc/subgid中列出的用于用户命名空间的范围的名称 |
--subuidname string | 在用户命名空间中使用的/etc/subuid中列出的范围的名称 |
--sysctl strings | Sysctl选项 |
--systemd string | 在systemd模式下运行容器(“true”|“false”|“always”)(默认值为“true”) |
--timeout uint | 允许容器运行的最长时间。该容器将在时间到期后自动终止。 |
--tmpfs tmpfs | 将临时文件系统(tmpfs)装入容器中 |
-t, --tty | 为容器分配一个伪TTY |
--tz string | 在容器中设置时区 |
--uidmap strings | 要用于用户命名空间的UID映射 |
--ulimit strings | Ulimit选项(默认值[nproc=4194304:4194304]) |
--umask string | 在容器中设置umask(默认值为“0022”) |
-u, --user string | 用户名或UID(格式:<name | UID>[:<group | gid>]) |
--userns string | 要使用的用户命名空间 |
--uts string | 要使用的名称空间 |
--variant string | 使用_VARIANT_u而不是运行架构变量来选择图像 |
-v, --volume stringArray | 绑定并将卷装载到容器中 |
--volumes-from stringArray | 从指定容器装入卷 |
-w, --workdir string | 容器内的工作目录 |