权限不够时,在命令前加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 命令新建一个容器

image-20240705092847996

image-20240705092916040

image-20240705092928829

image-20240705092943596

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的commitimportbuild命令

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 来启动一个容器,并通过一些选项和参数来实现备份数据的功能。以下是每个部分的具体解释:

  1. docker run:启动一个新的 Docker 容器。
  2. --volumes-from dbdata:将名为 dbdata 的容器中的卷挂载到新启动的容器中。这个选项确保新容器可以访问 dbdata 容器中的数据卷。
  3. -v $(pwd):/backup:将当前目录(由 $(pwd) 表示)挂载到新容器的 /backup 目录中。这个选项确保新容器可以访问并保存备份文件到当前目录。
  4. --name worker:为新启动的容器指定一个名称为 worker
  5. ubuntu:指定使用 ubuntu 镜像来创建容器。这意味着新容器将基于 Ubuntu 操作系统。
  6. 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 来启动一个容器,并通过一些选项和参数来恢复数据。以下是每个部分的具体解释:

  1. docker run:启动一个新的 Docker 容器。
  2. --volumes-from dbdata2:将名为 dbdata2 的容器中的卷挂载到新启动的容器中。这个选项确保新容器可以访问 dbdata2 容器中的数据卷。
  3. -v $(pwd):/backup:将当前目录(由 $(pwd) 表示)挂载到新容器的 /backup 目录中。这个选项确保新容器可以访问当前目录中的文件。
  4. busybox:指定使用 busybox 镜像来创建容器。busybox 是一个包含了许多 Unix 工具的轻量级镜像。
  5. 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 端口映射实现容器访问
  1. 从外部访问容器应用

    docker run -P 镜像 容器内运行的命令

    当使用-P(大写)时,docker会随机映射一个49000~49900的端口到内部容器开放的网络端口

    例如:docker run -d -P training/webapp python app.py

  2. 映射所有接口地址

    docker run -d -p 5000:5000 training/webapp python app.py

    这条命令使用 docker run 来启动一个容器,并通过一些选项和参数来运行一个 Python Web 应用。以下是每个部分的具体解释:

    1. docker run:启动一个新的 Docker 容器。
    2. -d:以分离模式(后台)运行容器。这意味着容器将在后台运行,而不是占用当前的终端。
    3. -p 5000:5000:将容器的端口映射到主机的端口。具体来说,将容器内部的 5000 端口映射到主机的 5000 端口。这使得可以通过访问主机的 5000 端口来访问容器内的应用。
    4. training/webapp:指定使用名为 training/webapp 的镜像来创建容器。这是一个预先构建的 Docker 镜像,其中包含了需要运行的应用及其环境。
    5. 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

  3. 映射到指定地址的指定端口

    可以使用 IP:HostPort:ContainerPort 格式指定映射使用一个特定地址,比如 localhost 地址 127.0.0.1

    docker run -d -p 127 0 0 1:5000:5000 training/webapp python app.py

  4. 映射到指定地址的任意端口

    使用 IP: :ContainerPort 绑定 localhost 的任意端口到容器的 5000 端口,本地主机 会自动分配一个端口

    docker run d p 127.0.0.1::5000 training/webapp python app.py

  5. 查看映射端口配置

​ 使用docker port来查看当前映射端口的配置

6.2 互联机制实现便捷互访
  1. 自定义容器命名

    使用--name 标记可以为容器自定义命名

    docker run - P --name web training/webapp python app .py

  2. 容器互联

    创建一个新的数据库容器:

    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是别名。

以上内容均为本书整理所得
最后修改:2024 年 07 月 11 日
如果觉得我的文章对你有用,请随意赞赏