跳至主要內容

docker

wangdx大约 13 分钟

参考网站

Ubuntu18.04使用阿里源镜像安装Docker并配置镜像加速【图文详细】 open in new window

Ubuntu通过阿里云镜像站安装docker,安装GPG证书的新方式open in new window

Portainer CE 安装汉化教程open in new window

简介

Docker 是一个快捷、轻便的系统级虚拟化技术,开发者和系统管理员可以使用它构建具备所有必要依赖项的应用程序,并将其作为一个包发布。

Docker 与其他如 VMWare 、Xen 、以及 VirtualBox 等工具的虚拟化方式不同,每个虚拟机不需要单独的客户操作系统。

所有的 Docker 容器有效地共享同一个主机系统内核。每个容器都在同一个操作系统中的隔离用户空间中运行。

Docker 容器可以在任何 Linux 版本上运行。比如说你使用 Fedora ,我用 Ubuntu 。我们能相互开发、共享并分发 Docker 镜像。

你无需担心操作系统、软件以及自定义设置,任何事都不用担心。只要我们的主机安装了 Docker ,就能持续开发。简言之,Docker 能够在任何地方运行!

前文中你读到了两个词:Docker 镜像 和 Docker 容器 ,或许你在想它们的区别。

通俗地说,Docker 镜像是一个描述容器应该如何表现的文件,而 Docker 容器是 Docker 镜像的运行(或停止)状态。

希望你能够理解 Docker 的基础概念。更多细节,你可以参考文章末尾的 Docker 官方指导手册。

Docker 依赖项

  • 64 位 Linux 或 Windows 系统
  • 如果使用 Linux ,内核版本必须不低于 3.10
  • 能够使用 sudo 权限的用户
  • 在你系统 BIOS 上启用了 VT(虚拟化技术)支持 on your system BIOS(参考: 如何查看 CPU 支持 虚拟化技术(VT))
  • 你的系统应该联网

Docker 安装卸载

方式一:

添加 Docker 库

#1.首先,安装必要的证书并允许 apt 包管理器使用以下命令通过 HTTPS 使用存储库:
apt-get install -y apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
#2.然后,运行下列命令添加 Docker 的官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#3.添加 Docker 官方库:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#4.使用命令更新 Ubuntu 源列表:
apt update

安装 Docker

#最后,运行下列命令在 Ubuntu 22.04 LTS 服务器中安装最新 Docker CE:
apt -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
#当然你也可以安装其他版本 Docker 。运行下列命令检查可以安装的 Docker 版本:
apt-cache madison docker-ce

docker-ce | 5:25.0.2-1~ubuntu.22.04~jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:25.0.1-1~ubuntu.22.04~jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:25.0.0-1~ubuntu.22.04~jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:24.0.9-1~ubuntu.22.04~jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
...

#你可以挑选上面列表中的任何版本进行安装。例如,安装 5:20.10.16~ 3-0 ~ubuntu-jammy 这个版本,运行:
apt install docker-ce=5:20.10.16~3-0~ubuntu-jammy docker-ce-cli=5:20.10.16~3-0~ubuntu-jammy containerd.io

#安装完成后,运行如下命令验证 Docker 服务是否在运行:
systemctl status docker
#如果没有运行,运行以下命令运行 Docker 服务:
systemctl start docker
#使 Docker 服务在每次重启时自动启动: 关闭systemctl disable docker
systemctl enable docker


#systemctl enable docker
 sudo docker version

方式二简易

#安装 docker
curl -fsSL https://get.docker.com | sh
#安装 docker-compose 如果下载慢更换国内镜像源
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#给docker-compose赋予运行权限
chmod +x /usr/local/bin/docker-compose

测试 Docker


#hello world 上述命令会下载一个 Docker 测试镜像,并在容器内执行一个 “hello_world” 样例程序。
#如果你看到类似下方的输出,那么祝贺你!Docker 正常运行在你的 Ubuntu 系统中了。
docker run hello-world

卸载


#1.删除docker及安装时自动安装的所有包
apt-get autoremove docker docker-ce docker-engine  docker.io  containerd runc
#2.查看docker是否卸载干净
dpkg -l | grep docker
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P # 删除无用的相关的配置文件
#3.删除没有删除的相关插件
apt-get autoremove docker-ce-*
#4.删除docker的相关配置&目录
rm -rf /etc/systemd/system/docker.service.d
rm -rf /var/lib/docker
#5.确定docker卸载完毕
docker --version
find / *docker

docker 配置

sudo mkdir -p /etc/docker
vim /etc/docker/daemon.json
sudo systemctl daemon-reload
sudo systemctl restart docker
rm -rf /var/lib/docker/*

{
  "registry-mirrors": ["https://6dciptgg.mirror.aliyuncs.com"],
  "data-root": "/www/data/docker",
  "iptables": false,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "188m",
    "max-file": "3"
  }
}

配置镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://6dciptgg.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

配置不修改防火墙

vim /etc/docker/daemon.json

#
{
  "registry-mirrors": ["https://6dciptgg.mirror.aliyuncs.com"],
  "data-root": "/mnt/data/docker",
  "iptables": false
}


#重启
systemctl restart docker

以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘:

cat > /etc/docker/daemon.json << EOF
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "20m",
        "max-file": "3"
    },
    "ipv6": true,
    "fixed-cidr-v6": "fd00:dead:beef:c0::/80",
    "experimental":true,
    "ip6tables":true
}
EOF

systemctl restart docker

配置数据目录

docker 的默认数据目录 Docker Root Dir 是 /var/lib/docker

一 、通过软链接修改 docker 数据存储目录

#1.停止正在运行的docker:
systemctl stop docker
#2.创建文件夹:
mkdir -p /mnt/data/docker
#3.移动/var/lib/docker/目录到新目录中:
###
###如果是未启动过,可以跳过 3 和 4
mv /var/lib/docker/* /mnt/data/docker
#4.删除/var/lib/docker/目录:
rm -rf /var/lib/docker
#5.软连接/data/docker 到 /var/lib/里:
ln -s /data/docker /var/lib/docker
#6启动docker
systemctl start docker

二 修改配置文件实现

# cat /etc/docker/daemon.json
vim /etc/docker/daemon.json
#v17.05.0 之后使用 data-root,旧版本请使用 graph
#默认不存在/etc/docker/daemon.json,手动创建即可。
{
  "registry-mirrors": ["https://5e159g9q.mirror.aliyuncs.com"],
  "data-root": "/mnt/data/docker"
}

systemctl restart docker
docker info

## Docker Root Dir: /mnt/data/docker

如果启动失败,参考 How To Change Docker Data Folder Configurationopen in new window 进行更改

安装 Docker Compose

Docker Compose 是一个可用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,你可以使用 Compose 文件来配置应用程序的服务。然后,使用单个命令,你可以从配置中创建和启动所有服务。

方式 1、使用二进制文件安装 Docker Compose

#1.下载最新 Docker Compose 。
#运行下列命令安装最新稳定的 Docker Compose 文件:
curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

##如果有更新版本,只需要将上述命令中的 v2.6.1 替换为最新的版本号即可。请不要忘记数字前的 "v" 。

#2.最后,使用下列命令赋予二进制文件可执行权限:
chmod +x /usr/local/bin/docker-compose

#3.运行下列命令检查安装的 Docker Compose 版本:
docker-compose version

方式 2、使用 Pip 安装 Docker Compose

或许,我们可以使用 Pip 安装 Docker Compose 。Pip 是 Python 包管理器,用来安装使用 Python 编写的应用程序。

参考下列链接安装 Pip 。

如何使用 Pip 管理 Python 包open in new window

安装 Pip 后,运行以下命令安装 Docker Compose。下列命令对于所有 Linux 发行版都是相同的!

pip install docker-compose

#2.安装 Docker Compose 后,使用下列命令检查版本:
docker-compose --version

开始使用 dockeropen in new window

docker 常用指令


docker-compose 常用指令

1、Docker-Compose 命令格式

docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]

2、docker-compose up

docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
选项包括:
-d 在后台运行服务容器
–no-color 不使用颜色来区分不同的服务的控制输出
–no-deps 不启动服务所链接的容器
–force-recreate 强制重新创建容器,不能与–no-recreate同时使用
–no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用
–no-build 不自动构建缺失的服务镜像
–build 在启动容器前构建服务镜像
–abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用
-t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
–remove-orphans 删除服务中没有在compose文件中定义的容器
–scale SERVICE=NUM 设置服务运行容器的个数,将覆盖在compose中通过scale指定的参数
docker-compose up
启动所有服务
docker-compose up -d
在后台所有启动服务
-f 指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d

3、docker-compose ps

docker-compose ps [options] [SERVICE...]
docker-compose ps
列出项目中目前的所有容器

4、docker-compose stop

docker-compose stop [options] [SERVICE...]

选项包括: -t, –timeout TIMEOUT 停止容器时候的超时(默认为 10 秒) docker-compose stop 停止正在运行的容器,可以通过 docker-compose start 再次启动

5、docker-compose -h

docker-compose -h 查看帮助

6、docker-compose down

docker-compose down [options]

停止和删除容器、网络、卷、镜像。 选项包括: –rmi type,删除镜像,类型必须是:all,删除 compose 文件中定义的所有镜像;local,删除镜像名为空的镜像 -v, –volumes,删除已经在 compose 文件中定义的和匿名的附在容器上的数据卷 –remove-orphans,删除服务中没有在 compose 中定义的容器 docker-compose down 停用移除所有容器以及网络相关

7、docker-compose logs

docker-compose logs [options] [SERVICE...] 查看服务容器的输出。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。可以通过–no-color 来关闭颜色。 docker-compose logs 查看服务容器的输出

8、docker-compose build docker-compose build [options] [--build-arg key=val...] [SERVICE...] 构建(重新构建)项目中的服务容器。 选项包括: –compress 通过 gzip 压缩构建上下环境 –force-rm 删除构建过程中的临时容器 –no-cache 构建镜像过程中不使用缓存 –pull 始终尝试通过拉取操作来获取更新版本的镜像 -m, –memory MEM 为构建的容器设置内存大小 –build-arg key=val 为服务设置 build-time 变量 服务容器一旦构建后,将会带上一个标记名。可以随时在项目目录下运行 docker-compose build 来重新构建服务

9、docker-compose pull

docker-compose pull [options] [SERVICE...] 拉取服务依赖的镜像。 选项包括: –ignore-pull-failures,忽略拉取镜像过程中的错误 –parallel,多个镜像同时拉取 –quiet,拉取镜像过程中不打印进度信息 docker-compose pull 拉取服务依赖的镜像

10、docker-compose restart

docker-compose restart [options] [SERVICE...] 重启项目中的服务。 选项包括: -t, –timeout TIMEOUT,指定重启前停止容器的超时(默认为 10 秒) docker-compose restart 重启项目中的服务

11、docker-compose rm

docker-compose rm [options] [SERVICE...] 删除所有(停止状态的)服务容器。 选项包括: –f, –force,强制直接删除,包括非停止状态的容器 -v,删除容器所挂载的数据卷 docker-compose rm 删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。

12、docker-compose start

docker-compose start [SERVICE...] docker-compose start 启动已经存在的服务容器。

13、docker-compose run

docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...] 在指定服务上执行一个命令。 docker-compose run ubuntu ping www.baidu.com 在指定容器上执行一个 ping 命令。

14、docker-compose scale

docker-compose scale web=3 db=2 设置指定服务运行的容器个数。通过 service=num 的参数来设置数量

15、docker-compose pause

docker-compose pause [SERVICE...] 暂停一个服务容器

16、docker-compose kill

docker-compose kill [options] [SERVICE...] 通过发送 SIGKILL 信号来强制停止服务容器。 支持通过-s 参数来指定发送的信号,例如通过如下指令发送 SIGINT 信号: docker-compose kill -s SIGINT

17、dokcer-compose config

docker-compose config [options] 验证并查看 compose 文件配置。 选项包括: –resolve-image-digests 将镜像标签标记为摘要 -q, –quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息 –services 打印服务名,一行一个 –volumes 打印数据卷名,一行一个

18、docker-compose create

docker-compose create [options] [SERVICE...] 为服务创建容器。 选项包括: –force-recreate:重新创建容器,即使配置和镜像没有改变,不兼容–no-recreate 参数 –no-recreate:如果容器已经存在,不需要重新创建,不兼容–force-recreate 参数 –no-build:不创建镜像,即使缺失 –build:创建容器前,生成镜像

19、docker-compose exec

docker-compose exec [options] SERVICE COMMAND [ARGS...] 选项包括: -d 分离模式,后台运行命令。 –privileged 获取特权。 –user USER 指定运行的用户。 -T 禁用分配 TTY,默认 docker-compose exec 分配 TTY。 –index=index,当一个服务拥有多个容器时,可通过该参数登陆到该服务下的任何服务,例如:docker-compose exec –index=1 web /bin/bash ,web 服务中包含多个容器

20、docker-compose port

docker-compose port [options] SERVICE PRIVATE_PORT 显示某个容器端口所映射的公共端口。 选项包括: –protocol=proto,指定端口协议,TCP(默认值)或者 UDP –index=index,如果同意服务存在多个容器,指定命令对象容器的序号(默认为 1)

21、docker-compose push

docker-compose push [options] [SERVICE...] 推送服务依的镜像。 选项包括: –ignore-push-failures 忽略推送镜像过程中的错误

22、docker-compose stop

docker-compose stop [options] [SERVICE...] 显示各个容器运行的进程情况。

23、docker-compose unpause

docker-compose unpause [SERVICE...] 恢复处于暂停状态中的服务。

24、docker-compose version

docker-compose version 打印版本信息。


docker 日志配置

#查看 Docker 镜像及日志等占用情况
docker system df

#!/bin/sh
#提供一个清理日志的脚本 相当于手动删除日志
echo "======== start clean docker containers logs ========"

logs=$(find /var/lib/docker/containers/ -name *-json.log)

for log in $logs
        do
                echo "clean logs : $log"
                cat /dev/null > $log
        done

echo "======== end clean docker containers logs ========"

# 增加执行权限
chmod +x clean_docker_log.sh
#运行脚本
./clean_docker_log.sh

##自动空间清理
docker system prune

#在docker run的时候加上以下参数 可以控制某个容器生成日志的大小
--log-driver json-file  #日志驱动
--log-opt max-size=[0-9+][k|m|g] #文件的大小
--log-opt max-file=[0-9+] #文件数量
--restart=always #服务器重启-容器自动启动


#Docker全局日志控制
#新建/etc/docker/daemon.json 若有就不用新建了 添加log-dirver和log-opts参数
# vim /etc/docker/daemon.json

{
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"3"}
}
max-size=500m,意味着一个容器日志大小上限是500M,
max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json
// 重启docker守护进程
# systemctl daemon-reload
# systemctl restart docker

//效果和Linux的 tail-f filename 一样,可以把最新内容刷新显示到屏幕上
docker logs -f <CONTAINER>

//效果和Linux的 tail-n 5 filename 一样,显示最后5行的内容 可以结合-f查看实时日志
docker logs --tail 20 <CONTAINER>

//例如查找所有包含 “error” 的log 可以结合其他参数使用
docker logs <CONTAINER> | grep error

//使用 --since 选项,显示从指定时间点到最新的日志
docker logs --since 2019-10-17T12:01:46.452616Z <CONTAINER>

//--since指定了开始时间点,还可以指定结束时间点,使用选项 --until,显示二者之间的日志
docker logs --since 2019-10-17T12:01:46.452616Z --until 2019-10-25T12:01:48.561714Z <CONTAINER>

//这些选项都可以放在一起使用
docker logs --tail 10 <CONTAINER> | grep info
docker logs -f --since 2019-10-17T12:01:46.452616Z --tail=10 <CONTAINER>

#把 error 日志都写到指定文件
docker logs -t <CONTAINER> | grep error >> logs_error.txt


https://blog.csdn.net/qq_40695642/article/details/102602438

maven 私服

https://blog.csdn.net/baidu_38287567/article/details/102629385

portainer

[]

上次编辑于: