权限不够时,在命令前加sudo
1、OpenEuler安装Docker
yum update
下载 repo 配置文件
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
修改安装源为国内地址
sed -i 's#https://download.docker.com#https://mirrors.tuna.tsinghua.edu.cn/docker-ce#' /etc/yum.repos.d/docker-ce.repo
使用CentOS7软件源
sed -i 's#$releasever#7#g' /etc/yum.repos.d/docker-ce.repo
安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
确认Docker服务正常启动
systemctl start docker
2、配置Docker
usermod -aG docker USER NAME
执行此命令是为避免每次使用Docker命令需要切换特权用户,可直接将当前用户加入安装中自动创建的 docker 用户组
[!NOTE]
hub.lony.win
代理连接
为了加速镜像拉取,可以使用以下命令设置registery mirror:
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://hub.lony.win"]
}
EOF
修改后执行 service docker restart
(可选)openssh
执行命令安装openssh:yum install openssh-server -y
在修改完成相关配置后执行 systemctl restart sshd
3、镜像与容器
3.1 获取镜像
以使用 docker [image] pull
命令直接从 Docker Hub 镜像源来下载镜像
格式为:docker [image] pull NAME[:TAG]
示例:
[root@bogon ~]# docker pull ubuntu:22.04
[!IMPORTANT]
在拉取镜像时,可能出现connection refused,此时参照2、配置Docker中的代理配置
3.2 查看镜像
使用images命令列出镜像 docker images
或者 docker images ls
docker [image] inspect
命令可以获取该镜像的详细信息
示例:
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 22.04 8a3cdc4d1ad3 7 days ago 77.9MB
3.3 新建容器
可以使用 docker create
命令新建一个容器
3.4 搜寻镜像
搜寻镜像的语法 docker search [option] keyword
-f, --filter filter : 过滤输出内容
--format string : 格式化输出内容
limit int : 限制输出结果个数,默认为 25个
--no-trunc : 不截断输出结果
3.5 删除和清理镜像
使用 docker rmi
或者 docker image rm
命令可以删除镜像
示例:
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 22.04 8a3cdc4d1ad3 7 days ago 77.9MB[root@bogon ~]# docker rmi 8a3cd
Untagged: ubuntu:22.04
Untagged: ubuntu@sha256:340d9b015b194dc6e2a13938944e0d016e57b9679963fdeb9ce021daac430221
Deleted: sha256:8a3cdc4d1ad3e314a91f76b7b99eed443f2152e3a9bf33e46669b31d094be443
Deleted: sha256:931b7ff0cb6f494b27d31a4cbec3efe62ac54676add9c7469560302f1541ecaf
可通过 docker image prune
命令来进行清理
[root@bogon ~]# docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
3.6 创建镜像
该节主要使用Docker的commit、import和build命令
3.6.1 基于已有容器创建
该方法主要使用docker commit
命令
命令格式:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
主要选项:
-a, --author="": 作者信息;-c,--change=[]:提交的时候执行Dockerfile指令;
-m,--message="":提交信息;
-p,--pause=true:提交时暂停容器运行。
示例:
[root@bogon ~]# docker commit -m "a new file" -a "Docker New" eca517201635 test:0.1
sha256:59d2ddcc9a027ccfe357f703b408370622c8500ac36fb8e6103121c85f6950e0[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 0.1 59d2ddcc9a02 11 seconds ago 77.9MB
ubuntu 22.04 8a3cdc4d1ad3 7 days ago 77.9MB
3.7 启动容器
3.7.1 使用docker start
启动容器
[root@bogon ~]# docker start b87405d1e170
b87405d1e170
3.7.2 使用docker run
启动
该命令等价于先执行docker create
再执行docker start
。
[root@bogon ~]# docker run ubuntu /bin/echo "Hello world"
Hello world
3.7.3 守护态运行,可通过添加-d参数来实现
[root@bogon ~]# docker run -d ubuntu /bin/sh -c "while true;do echo Hello world;sleep 1;done"
58265b614b56194df9532440eb708bbaf0e09f8f7795ca173a0e96026be48b54
[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58265b614b56 ubuntu "/bin/sh -c 'while t…" 3 seconds ago Up 2 seconds happy_volhard
3.8 停止容器
3.8.1 暂停容器
使用docker pause CONTAINER
命令来暂停运行容器,可使用docker unpause
来恢复运行
[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58265b614b56 ubuntu "/bin/sh -c 'while t…" 3 seconds ago Up 2 seconds happy_volhard
[root@bogon ~]# docker pause 58265
58265
[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES58265b614b56 ubuntu "/bin/sh -c 'while t…" 2 minutes ago Up 2 minutes (Paused) happy_volhard
3.8.2 终止容器
使用docker stop
命令来终止容器
该命令会先向容器发送SIGTERM信号,等待默认的10s后,在发送SIGKILL信号以终止容器。
执行docker container prune
命令,会自动清楚所有处于停止状态的容器。
此外,可以通过docker kill
直接发送SIGKILL信号来终止容器。
3.9 进入容器
3.9.1 attach命令
命令格式为:docker attach [--detach-key[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER
主要选项:
--detach-keys[=[]]:指定推出attach模式的快捷键序列,默认CTRL-p、CTRL-q;
--no-stdin=true|false:是否关闭标准输入,默认是保持打开。
--sig-proxy=true|false:是否代理收到的系统信号给应用进程,默认为true。
示例:
[root@bogon ~]# docker run -itd ubuntu
915368dcec46a090cab5e6f735dfe92592eaec468f9c4d28032fb6bad9559f42[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
915368dcec46 ubuntu "/bin/bash" 2 seconds ago Up 2 seconds sharp_clarke[root@bogon ~]# docker attach sharp_clarke
root@915368dcec46:/#[!CAUTION]
attach命令在多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示,当某个窗口因命令阻塞的时候,其他窗口也无法执行操作。
3.9.2 exec命令
命令格式:docker exec [-d] [--detach-key[=[]]] [-i] [--privileged] [-t] [-u] CONTAINER COMMAND [ARG...]
较为重要的参数:
-d,--detach:在容器中后台执行命令;
--detach-keys=“ ”:指定将容器切回后台的按键;
-e,--env=[]:指定环境变量列表;
-i,--interactive=true|false:打开标准输入接受用户输入命令,默认false
--privileged=true|false:是否给执行命令以高权限,默认false;
-t,--tty=true|false:分配伪终端,默认false;
-u,
--user=“ ”:执行命令的用户名或ID。
3.9.3 删除容器
使用docker rm
命令进行删除处于终止或退出的容器
命令格式:docker rm [-f] [-l] [-v] CONTAINER
-f,--force=false,是否强行终止并删除一个运行中的容器;
-l,--link=false,删除容器的连接,但保留容器;
-v,--volumes=false,删除容器挂载的数据卷
3.9.4 导入和导出容器
1、导出容器
使用docker export
命令导出容器
命令格式:docker export [-o] CONTAINER
-o,--output=" ",指定导出的tar文件名
2、导入容器
使用docker import
命令
命令格式:docker import [-c] [-m] file|URL| -[REPOSITORY[:TAG]]
-c,--change=[],在导入的同时对容器进行修改的Dockerfile指令
3.10 查看容器
3.10.1 查看容器详情
使用命令docker container inspect [OPTIONS] CONTAINER
使用该命令后,具体信息会以json格式返回
3.10.2 查看容器内进程
使用命令docker top CONTAINER
3.10.3 查看统计信息
使用命令docker stats [OPTIONS]
-a,-all,输出所有容器统计信息,默认仅在运行中;
-format string,格式化输出信息;
-no-stream,不持续输出,默认自动更新持续实时结果;
-no-trunc,不截断输出信息
4、搭建本地私有仓库
4.1 使用registry镜像创建私有仓库
安装Docker后,可通过官方提供的registry镜像来简单搭建一套本地私有仓库环境
docker run -d -p 主机端口号:容器端口号 -v 主机路径:容器路径 registry:2
5、数据管理
5.1 数据卷
使用命令docker volume create -d local test
可以快速在本地创建一个数据卷
5.2 绑定数据卷
在使用docker run命令时,可以使用-mount选项来使用数据卷
-mount选项支持三种类型的数据卷:
volume:普通数据卷,映射到主机/var/lib/docker/volumes路径
bind:绑定数据卷,映射到主机指定路径下
tmpfs:临时数据卷,只存在于内存中
5.3 利用数据卷容器来迁移数据
5.3.1 备份
使用以下命令来备份dbdata数据卷容器内的数据卷:
docker run --volumes-from dbdata -v $(pwd) :/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata
这条命令使用了 docker run
来启动一个容器,并通过一些选项和参数来实现备份数据的功能。以下是每个部分的具体解释:
docker run
:启动一个新的 Docker 容器。--volumes-from dbdata
:将名为dbdata
的容器中的卷挂载到新启动的容器中。这个选项确保新容器可以访问dbdata
容器中的数据卷。-v $(pwd):/backup
:将当前目录(由$(pwd)
表示)挂载到新容器的/backup
目录中。这个选项确保新容器可以访问并保存备份文件到当前目录。--name worker
:为新启动的容器指定一个名称为worker
。ubuntu
:指定使用ubuntu
镜像来创建容器。这意味着新容器将基于 Ubuntu 操作系统。tar cvf /backup/backup.tar /dbdata
:这是在容器内运行的命令,具体是使用tar
命令创建一个压缩文件。tar cvf
是创建压缩文件的命令,其中:c
表示创建一个新的 tar 文件。v
表示详细模式,显示处理的文件。f
表示指定输出文件的名称。/backup/backup.tar
是创建的 tar 文件保存的位置和名称。/dbdata
是要备份的目录。
整个命令的作用是启动一个基于 Ubuntu 的临时容器,将名为 dbdata
的容器中的数据卷和当前目录挂载到这个新容器中,然后使用 tar
命令将 /dbdata
目录中的内容打包成 backup.tar
文件并保存到当前目录的 /backup
文件夹中。
5.3.2 恢复
首先创建一个带有数据卷的容器dbdata2
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
然后创建另一个新的容器,挂载dbdata2的容器,并使用untar解压备份文件到所挂载的容器卷中
docker run --volumes-from dbdata2 -v $(pwd) :/backup busybox tar xvf /backup/backup.tar
这条命令使用
docker run
来启动一个容器,并通过一些选项和参数来恢复数据。以下是每个部分的具体解释:
docker run
:启动一个新的 Docker 容器。--volumes-from dbdata2
:将名为dbdata2
的容器中的卷挂载到新启动的容器中。这个选项确保新容器可以访问dbdata2
容器中的数据卷。-v $(pwd):/backup
:将当前目录(由$(pwd)
表示)挂载到新容器的/backup
目录中。这个选项确保新容器可以访问当前目录中的文件。busybox
:指定使用busybox
镜像来创建容器。busybox
是一个包含了许多 Unix 工具的轻量级镜像。
tar xvf /backup/backup.tar
:这是在容器内运行的命令,具体是使用tar
命令解压一个压缩文件。tar xvf
是解压文件的命令,其中:
x
表示解压文件。v
表示详细模式,显示处理的文件。f
表示指定输入文件的名称。/backup/backup.tar
是要解压的 tar 文件的位置和名称。整个命令的作用是启动一个基于
busybox
的临时容器,将名为dbdata2
的容器中的数据卷和当前目录挂载到这个新容器中,然后使用tar
命令将/backup
目录中的backup.tar
文件解压到dbdata2
容器的卷中,从而实现数据恢复。
6、端口映射与容器互联
6.1 端口映射实现容器访问
从外部访问容器应用
docker run -P 镜像 容器内运行的命令
当使用-P(大写)时,docker会随机映射一个49000~49900的端口到内部容器开放的网络端口
例如:
docker run -d -P training/webapp python app.py
映射所有接口地址
docker run -d -p 5000:5000 training/webapp python app.py
这条命令使用
docker run
来启动一个容器,并通过一些选项和参数来运行一个 Python Web 应用。以下是每个部分的具体解释:docker run
:启动一个新的 Docker 容器。-d
:以分离模式(后台)运行容器。这意味着容器将在后台运行,而不是占用当前的终端。-p 5000:5000
:将容器的端口映射到主机的端口。具体来说,将容器内部的5000
端口映射到主机的5000
端口。这使得可以通过访问主机的5000
端口来访问容器内的应用。training/webapp
:指定使用名为training/webapp
的镜像来创建容器。这是一个预先构建的 Docker 镜像,其中包含了需要运行的应用及其环境。python app.py
:这是在容器内运行的命令,具体是使用 Python 解释器运行app.py
脚本。app.py
通常是一个 Python Web 应用的入口文件。
整个命令的作用是启动一个基于
training/webapp
镜像的容器,在后台运行,并将容器的5000
端口映射到主机的5000
端口,然后使用 Python 解释器执行app.py
脚本,从而启动一个 Web 应用。通过访问主机的5000
端口,可以访问运行在容器内的 Web 应用。多次使用-p可以指定多个端口
docker run -d -p 5000 : 5000 -p 3000:80 training/webapp python app.py
映射到指定地址的指定端口
可以使用 IP:HostPort:ContainerPort 格式指定映射使用一个特定地址,比如 localhost 地址 127.0.0.1
docker run -d -p 127 0 0 1:5000:5000 training/webapp python app.py
映射到指定地址的任意端口
使用 IP: :ContainerPort 绑定 localhost 的任意端口到容器的 5000 端口,本地主机 会自动分配一个端口
docker run d p 127.0.0.1::5000 training/webapp python app.py
- 查看映射端口配置
使用docker port
来查看当前映射端口的配置
6.2 互联机制实现便捷互访
自定义容器命名
使用--name 标记可以为容器自定义命名
docker run - P --name web training/webapp python app .py
容器互联
创建一个新的数据库容器:
docker run -d --name db training/postgres
然后创建一个新的web容器,并将其连接到db容器:
docker run -d -P --name web --link db:db training /webapp python app.py
此时,db容器和web容器建立互联关系
--link参数格式:--link name:alias,其中name是要链接的容器名称,alias是别名。
以上内容均为本书整理所得