Docker 基本操作

 查看 Docker 的版本信息

[root@docker ~]# docker version
Client: Docker Engine - Community
Version: 19.03.4
API version: 1.40
Go version: go1.12.10
Git commit: 9013bf583a
Built: Fri Oct 18 15:52:22 2019
OS/Arch: linux/amd64
Experimental: false

Server: Docker Engine - Community
Engine:
Version: 19.03.8
API version: 1.40 (minimum version 1.12)
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:25:42 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683

查看 docker 的详细信息

[root@docker ~]# docker info
Client:
Debug Mode: false

Server:
Containers: 3
Running: 2
Paused: 0
Stopped: 1
Images: 3
Server Version: 19.03.8
Storage Driver: overlay2
Backing Filesystem: <unknown>
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-862.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.936GiB
Name: docker
ID: 4Q5Z:EBZC:TQEF:UY3U:GH4W:RHHS:RTSZ:X6QM:7PGN:6EIK:BLAF:5TPB
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://xc1orh81.mirror.aliyuncs.com/
Live Restore Enabled: false

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

Docker镜像操作

1、搜索镜像

  Docker 运行容器前需要本地存在对应的镜像,如果不存在本地镜像,Docker 就会尝试从默认镜像仓库 https://hub.docker.com 下载,这是由 Docker 官方维护的一个公共仓库,可以满足用户的绝大部分需求,用户也可以通过配置来使用自定义的镜像仓库。

docker search //从 Docker Hub 搜索镜像

命令格式:docker search 关键字

参数:

--automated=false  仅显示自动创建的镜像

--no-trunc=false     输出信息截断显示

-s,--stars=0             指定仅显示评价为指定星级以上的镜像

[root@docker ~]# docker search dhcp
NAME                                                               DESCRIPTION                                                                   STARS                                OFFICIAL                                         AUTOMATED
networkboot/dhcpd                                           Suitable for running a DHCP server for your ...                   46                                                                                                 [OK]
joebiellik/dhcpd                                                 DHCP server running on Alpine Linux                                 16                                                                                                 [OK]
gns3/dhcp                                                         A DHCP container for GNS3 using dnsmasq                       3                                                                                                   [OK]
instantlinux/dhcpd-dns-pxe                              Serve DNS, DHCP and TFTP from a small Alpine…            2                                                                                                   [OK]
modularitycontainers/dhcp-server                    ISC DHCP server                                                                  2                                                                                                   [OK]
ictu/dhcpd-tftpd                                                 dhcpd tftpd container                                                            1                                                                                                   [OK]
mobylinux/dhcp-client                                                                                                                                     1
njd90/dhcpd6                                                    This Docker image is suitable for running a …                     1                                                                                                   [OK]
marcelwiget/dhcptester                                     Simple dhcp client simulator for untagged, s…                    1
onesourceintegrations/dhcp                                                                                                                           0
mellanox/dhcp-cni                                             K8s dhcp cni plugin                                                              0
kramergroup/dhcpmanager-apiserver                                                                                                            0
kramergroup/dhcpmanager-controller                                                                                                            0
modularitycontainers/dhcp-client                       DHCP client                                                                         0                                                                                                    [OK]
linuxkit/dhcpcd                                                   LinuxKit dhcpcd package                                                     0
wastrachan/dhcpd                                             ISC DHCP Server in a Docker container, with …                 0
babim/dhcpd                                                      dhcpd on Alpine Linux                                                          0                                                                                                   [OK]
crazymanjinn/dhcpd                                          alpine dhcpd                                                                          0                                                                                                   [OK]
pnnlmiscscripts/dhcpd                                                                                                                                     0
feduxorg/dhcpd                                                  ICS DHCP Daemon Image                                                  0
biomedia/dhcp-structural-pipeline                      The dHCP structural pipeline performs struct…                  0
kosdk/dhcpd                                                       ISC DHCP Server Container.                                              0
fouadchamoun/dhcp-helper                               Lightweight DHCP Relay                                                     0
engines/dhcpd                                                                                                                                                0
hanlon/dhcproxy                                                dhcproxy augments local unmodified dhcp serv…              0                                                                                                     [OK]

[root@docker ~]# docker search -s 10 dhcp
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME                                                                     DESCRIPTION                                                          STARS                                       OFFICIAL                                   AUTOMATED
networkboot/dhcpd                                                 Suitable for running a DHCP server for your …         46                                                                                                       [OK]
joebiellik/dhcpd                                                       DHCP server running on Alpine Linux                       16                                                                                                       [OK]

  返回很多包含 dhcp 关键字的镜像,其中返回信息包括镜像名称(NAME)、描述(DESCRIPTION)、星级(STARS)、是否官方创建(OFFICIAL)、是否主动创建(AUTOMATED)。默认的输出结果会按照星级评价进行排序,表示该镜像的受欢迎度。在下载镜像时,可以参考这一项,在搜索时还可以使用 -s 或者 -stars=x 显示指定星级以上的镜像,x 为任意数。星级越高表示越受欢迎;是否为官方镜像一项是指是否是由官方项目组创建和维护的镜像,一般官方项目组维护的镜像单个单词作为镜像名称。我们称为基础镜像或者根镜像。像 reinblau/dhcp 这种命名方式的镜像,表示是由 Docker Hub 的用户 reinblau 创建并维护的镜像,带有用户名为前缀;是否主动创建资源则是指是否允许用户验证镜像的来源和内容。

  使用 docker search 命令只能查找镜像,镜像的标签无法查找,因此如果需要查找 docker 标签,需要从网页上访问镜像仓库 https://hub.docker.com 进行查找。

2、获取镜像

搜索到符合需求的镜像,可以使用 docker pull 命令从网络下载镜像到本地使用。

命令格式:docker pull 仓库名称[:标签]

  对于 Docker 镜像来说,如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest,也可以通过指定的标签来下载特定版本的某一镜像。这里标签就是用来区分镜像版本的。

[root@docker ~]# docker pull docker.io/nginx
Using default tag: latest
latest: Pulling from library/nginx
c499e6d256d6: Pull complete
74cda408e262: Pull complete
ffadbd415ab7: Pull complete
Digest: sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

  从整个下载的过程可以看出,镜像文件由若干层(Layer)组成,我们称为 AUFS(联合文件系统),是实现增量保存于更新的基础,下载过程中会输出镜像的各层信息。镜像下载到本地之后就可以随时使用该镜像了。

  用户也可以选择从其他注册服务器仓库下载,这时需要在仓库名称前指定完整的仓库注册服务器地址。

3、查看镜像信息

使用 docker images 命令查看下载到本地的所有镜像。

命令格式:docker images 仓库名称[:标签]

[root@docker ~]# docker images
REPOSITORY    TAG         IMAGE ID               CREATED                     SIZE
nginx                   latest        ed21b7a8aee9        3 days ago                   127MB
nginx                   <none>    540a289bab6c        5 months ago                126MB

  docker images nginx 查看某一类镜像

从回显的信息看:

REPOSITORY    镜像所属仓库

TAG                    镜像的标签信息

IMAGE ID           镜像的唯一 ID

CREATED          镜像创建时间

SIZE                   镜像大小

4、获取镜像的详细信息

命令格式:docker inspect 镜像ID

[root@docker ~]# docker inspect ed21b7a8aee9
[
{
"Id": "sha256:ed21b7a8aee9cc677df6d7f38a641fa0e3c05f65592c592c9f28c42b3dd89291",
"RepoTags": [
"nginx:latest"
],
"RepoDigests": [
"nginx@sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596"
],
"Parent": "",
"Comment": "",
"Created": "2020-03-31T03:19:30.487069362Z",
"Container": "5c86b143cf5caec0aed5c331922c243f00600152ec0e9ecbe8531771562e72b8",
"ContainerConfig": {
"Hostname": "5c86b143cf5c",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NGINX_VERSION=1.17.9",
"NJS_VERSION=0.3.9",
"PKG_RELEASE=1~buster"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"CMD ["nginx" "-g" "daemon off;"]"
],
"ArgsEscaped": true,
"Image": "sha256:9be1fc3b00d81a66f4de11f5f5bf176e0748434be056cf3152386cc917307e7f",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
},
"StopSignal": "SIGTERM"
},
"DockerVersion": "18.09.7",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NGINX_VERSION=1.17.9",
"NJS_VERSION=0.3.9",
"PKG_RELEASE=1~buster"
],
"Cmd": [
"nginx",
"-g",
"daemon off;"
],
"ArgsEscaped": true,
"Image": "sha256:9be1fc3b00d81a66f4de11f5f5bf176e0748434be056cf3152386cc917307e7f",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
},
"StopSignal": "SIGTERM"
},
"Architecture": "amd64",
"Os": "linux",
"Size": 126769107,
"VirtualSize": 126769107,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/1fbda13bf61c46e7a174079d3d43cb09488c7606718256d4303c9c7dabc9dc8d/diff:/var/lib/docker/overlay2/76b95173415a45153616dab4ceeb104b4a85d1db21b97e50d78a8da53d6acdbb/diff",
"MergedDir": "/var/lib/docker/overlay2/a653aa12c9c8567946f67198374c1f3ee71b798cbee0c18de06563152a29a8ad/merged",
"UpperDir": "/var/lib/docker/overlay2/a653aa12c9c8567946f67198374c1f3ee71b798cbee0c18de06563152a29a8ad/diff",
"WorkDir": "/var/lib/docker/overlay2/a653aa12c9c8567946f67198374c1f3ee71b798cbee0c18de06563152a29a8ad/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:c3a984abe8a88059915bb6c7a1d249fd1ccc16d931334ac8816540b0eb686b45",
"sha256:99134ec7f247e5a211c7205fec587bf72a6d4aac339b21858b892e9c04f78920",
"sha256:d37eecb5b7691ec21bd19989e37f8bb4d20b340a775591d0f3db5897d606b0e4"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]

  镜像的详细信息中包括创建时间、系统版本、主机名、域名、用户、卷、标签、操作系统、设备ID等各种信息。

5、为镜像添加新的标签

命令格式: docker tag 名称[:标签] 新名称[:标签]

[root@docker ~]# docker tag nginx nginx:nginx
[root@docker ~]# docker images
REPOSITORY           TAG         IMAGE ID               CREATED          SIZE
nginx                          latest         ed21b7a8aee9      3 days ago          127MB
nginx                          nginx         ed21b7a8aee9      3 days ago          127MB
nginx                          <none>      540a289bab6c      5 months ago     126MB

6、删除镜像

使用 docker rmi 命令可以删除多余的镜像

删除镜像的操作有两种方法:使用镜像的标签删除镜像;使用镜像的ID删除镜像。

命令格式

docker rmi  仓库名称[:标签]

docker rmi  镜像ID

[root@docker ~]# docker rmi nginx:nginx
Untagged: nginx:nginx
Untagged: nginx@sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
Deleted: sha256:ed21b7a8aee9cc677df6d7f38a641fa0e3c05f65592c592c9f28c42b3dd89291
Deleted: sha256:8a305f371a6c3c445a1dfc500c1364743868a269ab8cdaf95902692e82168352
Deleted: sha256:d079ef06ec1f10a8050887365f9a940b39547ba6bcc46b16a463e740984f3223
Deleted: sha256:c3a984abe8a88059915bb6c7a1d249fd1ccc16d931334ac8816540b0eb686b45

  当一个镜像有多个标签的时候,docker rmi 命令只是删除该镜像多个标签中的指定标签,不会影响镜像文件,相当于只是删除了镜像的一个标签而已,但该镜像只剩下一个标签的时候就要小心了,再使用删除命令就会彻底删除该镜像。

例如:上面的操作删除 nginx:nginx 镜像时,可以看出删除了整个镜像文件的所有层。

  当使用 docker rmi 命令后面跟上镜像的ID号时,必须保证该镜像没有被容器使用才能进行,删除时系统会先删除所有指向该镜像的标签,然后删除该镜像文件本身。如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。

[root@docker ~]# docker rmi 540a289bab6c
Error response from daemon: conflict: unable to delete 540a289bab6c (must be forced) - image is being used by stopped container 17d9ccf1815c

[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE                COMMAND                         CREATED                 STATUS                                     PORTS                       NAMES
17d9ccf1815c            540a289bab6c    "nginx -g 'daemon of…"      4 months ago             Exited (0) 4 months ago                                               dreamy_moser
fe6168054c36           540a289bab6c     "/bin/bash"                          4 months ago             Exited (0) 4 months ago                                               gallant_khayyam
3756a7fe77be           540a289bab6c     "/bin/bash"                          4 months ago             Exited (0) 4 months ago                                               suspicious_kare

7、存出镜像和载入镜像

  当需要把一台机器上的镜像迁移到另一台机器上的时候,需要将镜像保存成本地文件,这一个过程叫做存出镜像,可以使用 docker save 命令进行存出操作。之后就可以复制该文件到其他机器。

命令格式: docker save -o 存出镜像为本地文件

[root@docker ~]# docker save -o nginx-latest.tar nginx:latest
[root@docker ~]# ls
anaconda-ks.cfg        git-2.22.0.tar.gz             git_data.git             nginx-latest.tar

将存出的镜像从 A 机器拷贝到 B 机器,需要在 B 机器上使用该镜像,就可以将该导出文件导入到 B 机器的镜像库中,这一过程叫做载入镜像。使用 docker load 或者 docker --input 进行载入操作。

命令格式:docker load  < 存出的文件 或者 docker load --input 存出的文件

[root@docker ~]# docker load < nginx-latest.tar
c3a984abe8a8: Loading layer 72.48MB/72.48MB
99134ec7f247: Loading layer 58.11MB/58.11MB
d37eecb5b769: Loading layer 3.584kB/3.584kB
Loaded image: nginx:latest

[root@docker ~]# docker load --input nging-latest.tar
c3a984abe8a8: Loading layer 72.48MB/72.48MB
99134ec7f247: Loading layer 58.11MB/58.11MB
d37eecb5b769: Loading layer 3.584kB/3.584kB
Loaded image: nginx:latest

8、上传镜像

  本地存储的镜像越来越多,就需要指定一个专门存放这些镜像的地方——仓库。目前比较方便的就是公共仓库,默认上传到 Docker Hub 官方仓库,需要注册使用公共仓库的账号,可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。在上传镜像之前,需要对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。

命令格式:docker push 仓库名称:标签

例如:在公共仓库上已经注册成功了一个账号,这个账号叫做 wxl2567

Docker 容器操作

1、创建容器与运行容器

   Docker 的创建就是将镜像加载到容器的过程,Docker 的容器十分轻量级,用户可以随时创建或者删除。新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器,这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全停止。停止的容器可以重新启动并保留原来的修改。可以使用 docker create 命令新建一个容器。

命令格式:docker create [选项]...  镜像  运行的程序

常用选项:

-i       让容器的输入保持打开

-t       让 Docker 分配一个伪终端

-d      守护进程形式运行(后台运行)

-p      端口映射(让容器的端口与宿主机的端口关联)

-v      目录映射(两个目录内容相同,就相当于一个)

[root@docker ~]# docker create -it nginx:latest /bin/bash
458b25c30f49fdb27aee14b32d10bc687d9f1dc977174f5b7c19fef7445dbb44

注意:如果创建容器命令报错 "WARNING:IPv4 forwarding is disabled.Networking will not work.",就使用 vim 编辑器 打开 /etc/sysctl.conf 文件,在其中添加 net.ipv4.ip_forward=1,然后使用 sysctl -p 命令加载配置

[root@docker ~]# head -1 /etc/sysctl.conf

net.ipv4.ip_forward=1

[root@docker ~]# sysctl -p

使用 docker create 命令创建新容器后会返回一个唯一的ID。

   可以使用 docker ps 命令来查看运行的所有容器的运行状态。添加 -a 选项可以列出系统中所有容器状态。-q 只查看容器ID。

[root@docker ~]# docker ps
CONTAINER ID                      IMAGE                      COMMAND                      CREATED                        STATUS                          PORTS               NAMES
458b25c30f49                          nginx:latest                "/bin/bash"                        23 minutes ago            Up 7 minutes                      80/tcp               unruffled_austin
[root@docker ~]# docker ps -a
CONTAINER ID                    IMAGE                         COMMAND                      CREATED                        STATUS                        PORTS                  NAMES
0b96b84b428a                     nginx:latest                   "/bin/bash"                          27 seconds ago             Created                                                     happy_greider
458b25c30f49                      nginx:latest                     "/bin/bash"                         23 minutes ago            Up 8 minutes                    80/tcp u                nruffled_austin

  输出信息显示容器的ID号、加载的镜像、运行的程序、创建时间、目前所处的状态、端口映射。其中状态一栏为空表示当前的容器处于停止状态。

2、容器的启动与停止

启动、停止、重启容器可以使用 docker start/stop/restart 命令

命令格式:docker start/stop/restart 容器的ID/名称

[root@docker ~]# docker start 0b96b84b428a
0b96b84b428a
[root@docker ~]# docker ps
CONTAINER ID                       IMAGE                  COMMAND                       CREATED                       STATUS                       PORTS                   NAMES
0b96b84b428a                        nginx:latest            "/bin/bash"                     10 minutes ago                Up 4 seconds                  80/tcp                 happy_greider
458b25c30f49                         nginx:latest            "/bin/bash"                     33 minutes ago                 Up 17 minutes                80/tcp                 unruffled_austin

  容器启动后,可以看到容器状态一栏已经变为 UP,表示容器已经处于启动状态。如果用户想创建并启动容器,可以直接执行 docker run 命令,等同于先执行 docker create 命令,再执行 docker start 命令。需要注意只要后面的命令运行结束,容器就会停止。

  当利用 docker run 来创建容器时,Docker 在后台的标准运行过程是这样的:检查本地是否存在指定的镜像,当镜像不存在时,会从公有仓库下载;利用镜像创建并启动一个容器;分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;从宿主机配置的网桥接口中桥接一个虚拟机接口到容器中;分配一个地址池中的 IP 地址给容器;执行用户指定的应用程序;执行完毕后容器被终止运行。

例如,创建容器并启动执行一条 shell 命令

[root@docker ~]# docker run nginx:latest /bin/bash -c ls /
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

这和在本地直接执行命令几乎没有区别。

[root@docker ~]# docker ps -a
CONTAINER ID                       IMAGE                  COMMAND                            CREATED                       STATUS                             PORTS                             NAMES
669cb558a88d                         nginx:latest           "/bin/bash -c ls"                     3 minutes ago                  Exited (0) 3 minutes ago                                              thirsty_lamarr
0b96b84b428a                         nginx:latest           "/bin/bash"                            3 hours ago                      Up 3 hours                          80/tcp                               happy_greider
458b25c30f49                          nginx:latest           "/bin/bash"                            3 hours ago                      Up 3 hours                          80/tcp                                unruffled_austin

查看容器的运行状态,可以看出容器在执行完 "/usr/bin/bash -c ls / " 命令之后就停止了。

  有时候需要在后台持续的运行这个容器,就需要让 docker 容器在守护进程形式运行。可以在 docker

run 命令之后添加 -d 选项来实现。但是需要注意容器所运行的程序不能结束。

例如,下面的容器会持续在后台运行。

[root@docker ~]# docker run -d nginx:latest /bin/bash -c "while true;do
echo hello;done"
880a20a3c1071182d25f8c3a9ffd89dcbdd35020ce8c7361327c1e1cb1ef2264

[root@docker ~]# docker ps
CONTAINER ID         IMAGE                        COMMAND                            CREATED                                   STATUS                                      PORTS                          NAMES
880a20a3c107           nginx:latest                "/bin/bash -c 'while…"             38 seconds ago                           Up 37 seconds                             80/tcp                          gallant_greider
0b96b84b428a           nginx:latest                "/bin/bash"                                3 hours ago                                 Up 3 hours                                   80/tcp                          happy_greider
458b25c30f49            nginx:latest                "/bin/bash"                                3 hours ago                                 Up 3 hours                                   80/tcp                          unruffled_austin

查看容器内的输出

[root@docker ~]# docker logs 880

3、容器的进入

  需要进入容器进行相应操作时,可以使用 docker exec 命令或者 docker attach 命令进入运行着的容器。

命令格式: docker exec -it 容器ID/名称 /bin/bash

其中 -i 选项表示让容器的输入保持打开;

-t 选项表示让 docker 分配一个伪终端。

例如:进入正在运行着的容器 

[root@docker ~]# docker exec -it 0b /bin/bash
root@0b96b84b428a:/#

用户可以通过所创建的终端来输入命令,通过 exit 命令退出容器。容器关闭

root@0b96b84b428a:/# exit
exit

通过 Ctrl +p q 命令退出容器并保证容器在后台继续运行。容器继续运行

[root@docker ~]# docker attach 0b
root@0b96b84b428a:/# 

4、容器的导出与导入

  用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,首先需要将已经创建好的容器导出为文件,可以使用 docker export 命令实现,无论这个容器是处于运行状态还是停止状态均可导出。导出之后可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。

命令格式:docker export   容器ID/名称  >  文件名

例如,

[root@docker ~]# docker export 0b > nginx.tar
[root@docker ~]# ls
anaconda-ks.cfg git_data.git nginx.tar
git-2.22.0.tar.gz nging-latest.tar

导出的文件从 A 机器拷贝到 B 机器,之后使用 docker import 命令导入,成为镜像。

命令格式:cat 文件名 | docker import - 生成的镜像名称:标签

例如,

[root@docker ~]# cat nginx.tar | docker import - nginx:test
sha256:156b4f039e228995f4c5accc13b345529047aeb3d442b170018ce07ac239c89e
[root@docker ~]# docker images nginx
REPOSITORY             TAG                 IMAGE ID               CREATED                 SIZE
nginx                            test                 156b4f039e22          21 seconds ago        125MB
nginx                            latest               ed21b7a8aee9        3 days ago                127MB
nginx                            <none>           540a289bab6c          5 months ago           126MB

5、容器的删除

docker start | stop | restart | kill  // 运行已停止的容器 | 停止一个正在运行的容器 | 重启 一个容器 | 杀死一个正在运行的容器

可以使用 docker rm 命令将一个已经终止状态的容器进行删除。

命令格式:docker rm 容器ID / 名称

例如,

[root@docker ~]# docker rm 880a20a3c107
880a20a3c107

  如果删除一个正在运行的容器,可以添加 -f 选项 强制删除,但是建议先将容器停止再做删除操作。

  Docker 默认的存储目录在 /var/lib/docker,Docker 的镜像、容器、日志等内容全部都存储在此,可以单独使用大容量的分区来存储这些东西,并且一般选择建立 LVM 逻辑卷。从而避免 Docker 运行过程中存储目录容量不足。

6、文件复制

将主机 /root/anaconda-ks.cfg 目录拷贝到容器 0b96b84b428a 的 /tmp 目录下。

[root@docker ~]# docker cp /root/anaconda-ks.cfg 0b96b84b428a:/tmp
[root@docker ~]# docker attach 0b96b84b428a
root@0b96b84b428a:/# ls /tmp
anaconda-ks.cfg
root@0b96b84b428a:/#

创建私有仓库

  仓库(Repository)是集中存放镜像的地方。

  注册服务器才是存放仓库具体的服务器(Registry),每个服务器上都可以放置多个仓库,而每个仓库下可以放置多个镜像,每个镜像上可以运行多个容器,每个容器上可以跑一个应用或应用组。

仓库自身可以分为:公共仓库和私有仓库。

比如公有仓库:http://hub.docker.com 或国内的:dl.dockerpool.com

安装 docker 后,可以通过官方提供的 registry 镜像来简单搭建一套本地仓库环境

[root@docker ~]# mkdir -pv /opt/data/registry
mkdir: 已创建目录 "/opt/data"
mkdir: 已创建目录 "/opt/data/registry"

[root@docker ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry docker.io/registry
Unable to find image 'registry:latest' locally
latest: Pulling from library/registry
486039affc0a: Pull complete
ba51a3b098e6: Pull complete
8bb4c43d6c8e: Pull complete
6f5f453e5f2d: Pull complete
42bc10b72f42: Pull complete
Digest: sha256:7d081088e4bfd632a88e3f3bcd9e007ef44a796fddfe3261407a3f9f04abe1e7
Status: Downloaded newer image for registry:latest
138093f2fe8a11590e875dd2371f092776618d8e19a6cd60495eb4377e73c10a

[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE             COMMAND                               CREATED                          STATUS                            PORTS                                    NAMES
138093f2fe8a           registry             "/entrypoint.sh /etc…"            About a minute ago               Up About a minute            0.0.0.0:5000->5000/tcp           laughing_shamir
669cb558a88d         nginx:latest      "/bin/bash -c ls"                      3 hours ago                           Exited (0) 3 hours ago                                                       thirsty_lamarr
0b96b84b428a         nginx:latest      "/bin/bash"                             5 hours ago                            Up 5 hours                        80/tcp                                       happy_greider
458b25c30f49          nginx:latest       "/bin/bash"                            6 hours ago                            Up 6 hours                        80/tcp                                        unruffled_austin

[root@docker ~]# vim /usr/lib/systemd/system/docker.service

在 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 后添加 --insecure-registry 192.168.200.123:5000(注册服务器IP地址:5000)

[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl restart docker

[root@docker ~]# docker ps -a
CONTAINER ID      IMAGE                  COMMAND                          CREATED                                       STATUS                                  PORTS                        NAMES
138093f2fe8a         registry                 "/entrypoint.sh /etc…"          15 minutes ago                                Exited (2) 8 seconds ago                                         laughing_shamir
669cb558a88d       nginx:latest           "/bin/bash -c ls"                     3 hours ago                                    Exited (0) 3 hours ago                                              thirsty_lamarr
0b96b84b428a       nginx:latest           "/bin/bash"                             6 hours ago                                   Exited (0) 8 seconds ago                                          happy_greider
458b25c30f49        nginx:latest           "/bin/bash"                             6 hours ago                                    Exited (0) 8 seconds ago                                         unruffled_austin

[root@docker ~]# docker start 138093f2fe8a
138093f2fe8a
[root@docker ~]# docker ps -a
CONTAINER ID            IMAGE              COMMAND                     CREATED                             STATUS                                  PORTS                                         NAMES
138093f2fe8a               registry              "/entrypoint.sh /etc…"     20 minutes ago                      Up 20 seconds                      0.0.0.0:5000->5000/tcp                  laughing_shamir
669cb558a88d             nginx:latest        "/bin/bash -c ls"               3 hours ago                           Exited (0) 3 hours ago                                                                  thirsty_lamarr
0b96b84b428a             nginx:latest       "/bin/bash"                       6 hours ago                            Exited (0) 4 minutes ago                                                              happy_greider
458b25c30f49              nginx:latest       "/bin/bash"                       6 hours ago                            Exited (0) 4 minutes ago                                                              unruffled_austin

[root@docker ~]# docker images
REPOSITORY       TAG                        IMAGE ID                          CREATED                    SIZE
nginx                      test                       156b4f039e22                 About an hour ago           125MB
nginx                     latest                     ed21b7a8aee9                3 days ago                       127MB
registry                  latest                     708bc6af7e5e                 2 months ago                   25.8MB
nginx                    <none>                   540a289bab6c                5 months ago                   126MB
[root@docker ~]# docker tag nginx:latest 192.168.200.123:5000/nginx:latest
[root@docker ~]# docker images
REPOSITORY                                    TAG                        IMAGE ID                           CREATED                                SIZE
nginx                                                   test                        156b4f039e22                    About an hour ago                    125MB
192.168.200.123:5000/nginx             latest                      ed21b7a8aee9                    3 days ago                               127MB
nginx                                                  latest                      ed21b7a8aee9                    3 days ago                               127MB
registry                                               latest                      708bc6af7e5e                     2 months ago                           25.8MB
nginx                                                 <none>                    540a289bab6c                    5 months ago                           126MB

[root@docker ~]# docker push 192.168.200.123:5000/nginx:latest
The push refers to repository [192.168.200.123:5000/nginx]
d37eecb5b769: Pushed
99134ec7f247: Pushed
c3a984abe8a8: Pushed
latest: digest: sha256:7ac7819e1523911399b798309025935a9968b277d86d50e5255465d6592c0266 size: 948

原文地址:https://www.cnblogs.com/2567xl/p/12500754.html