Docker的镜像及容器常用操作(2)
一、docker镜像
镜像(docker image) --- Docker 运行容器之前需要本地存在镜像,若本能地不存在,那么 Docker 会找默认镜像仓库( Docker Hub 公共注册服务器中的仓科)下载,用户也可以通过配置使用自己的镜像库
1、下载镜像
docker pull NAME:TAG
下载某个被打上了某个标签的叫 ×× 名字 的镜像
[root@ren7 ~]# docker pull centos
若在下载时你未指定标签,默认追加 latest标签,表示库中最新镜像
镜像在下载过程中是分层的,并且在每层前会有各层的 ID号,层(Layer )是 AUFS (联合文件系统)的重要概念,是实现增量保存与更新的基础
实际上面的命令的原型是
docker pull registry.hub.docker.com/centos:7
即从默认的注册服务器下载指定的镜像当然,以此你也可以用这种格式到其他仓库下载你所需要的镜像了!!!
2、查看本地镜像相关信息
[root@ren7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0f3e07c0138f 2 weeks ago 220MB
a.源自哪个仓库
b.标签信息 ---用于区分同一个仓库的同名镜像可用 docker tag仓库名:
标签名 新库名:新标签
c. 镜像 ID
d. 创建时间
e. 镜像大小
3、搜索库中满足需求的镜像,以此下载符合需求的镜像文件
[root@ren7 ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5617 [OK]
ansible/centos7-ansible Ansible on Centos7 124 [OK]
jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … 114 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 99 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 63
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 57 [OK]
a.哪个库
b.绝对路径,库中的带有搜索关键字的镜像
c.描述
d.官方
e.是否自动创建
4、删除本地镜像
docker rmi image[ image== 库:标签 ][ ID 号 ]
[root@ren7 ~]# docker image tag centos:latest centosnew:v1 [root@ren7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 0f3e07c0138f 2 weeks ago 220MB centosnew v1 0f3e07c0138f 2 weeks ago 220MB [root@ren7 ~]# docker rmi centosnew:v1 Untagged: centosnew:v1 [root@ren7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 0f3e07c0138f 2 weeks ago 220MB
当有别名镜像时,是同一个ID 号多个名字 ,删除任一个对其它互相无伤害,直至删除最后一个,镜像被彻底删除;用ID号删除,默认会删除同一个ID的多个镜像,除非该镜像创建的容器存在,那么镜像能够不被删除,所以在删除时正确顺序是先删除使用镜像的容器,再删除镜像
5、获取镜像使用的帮助信息
[root@ren7 ~]# docker image --help Usage: docker image COMMAND Manage images Options: Commands: build 从docker文件里面创建镜像 history 显示一个镜像的历史 import 从tarball导入内容以创建文件系统映像 inspect 显示一个或多个镜像的详细信息 load 从tar压缩包或者标准输入中加载一个镜像ls 列出镜像 prune 移除没有被使用的镜像 pull 从注册处拉取一个镜像或者镜像库 push 把一个镜像或者镜像库推送至注册处 rm 移除一个或多个镜像(别名:rmi) save 保存一个或者多个镜像到tar压缩包,默认情况下流式传输 tag 创建一个引用SOURCE_IMAGE的标记TARGET_IMAGE Run 'docker image COMMAND --help' for more information on a command.
二、docker镜像分层
docker镜像的分层结构:支持通过扩展现有镜像,创建新的镜像
可以看到,新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。
1、分层结构的优势:
(1)共享资源:
有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
这时可能就有人会问了:如果多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,比如说修改 /etc 下的文件,这时其他容器的 /etc 是否也会被修改?
答案是不会!
修改会被限制在单个容器内。
这就是我们接下来要学习的容器 Copy-on-Write 特性。
(2)可写的容器层:
当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。
只有容器层是可写的,容器层下面的所有镜像层都是只读的。
2、在容器层的操作及特性
镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同路径的文件,比如 /a,上层的 /a 会覆盖下层的 /a,也就是说用户只能访问到上层中的文件 /a。在容器层中,用户看到的是一个叠加之后的文件系统。
(1)添加文件
在容器中创建文件时,新文件被添加到容器层中。
(2)读取文件
在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,打开并读入内存。
(3)修改文件
在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
(4)删除文件
在容器中删除文件时,Docker 也是从上往下依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。
只有当需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。
这样就解释了我们前面提出的问题:容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享。
三、docker镜像创建
创建镜像的三种方法:
(1)基于修改后的容器创建:docker commit 命令
(2)基于本地模板导入
(3)基于 Dockerfile 文件创建
1、基于修改后的容器创建
docker run -it centos:7 /bin/bash mkdir /testdir exit
此时容器较镜像已经发生改变,我们以此生成新镜像
docker commit container-name image-name
顺利的话会返回一个新的 ID 号
docker images
查看镜像列表,会看到本地多了一个名为新名字的镜像
[root@ren7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 0f3e07c0138f 2 weeks ago 220MB [root@ren7 ~]# docker run -it centos:latest /bin/bash [root@b4c903c86d5e /]# echo "hello docker" > test.txt [root@b4c903c86d5e /]# ls bin etc lib lost+found mnt proc run srv test.txt usr dev home lib64 media opt root sbin sys tmp var [root@b4c903c86d5e /]# exit exit [root@ren7 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b4c903c86d5e centos:latest "/bin/bash" About a minute ago Exited (0) 54 seconds ago compassionate_pike 3abace6c9603 centos:latest "/bin/bash" About an hour ago Exited (0) About an hour ago awesome_snyder [root@ren7 ~]# docker commit awesome_snyder testcentos:v1 sha256:ecc0a6432f9c6316ebbd4e15fc6bc0442eb29494af65b0dca2a0fc6752996edf [root@ren7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE testcentos v1 ecc0a6432f9c 9 seconds ago 220MB centos latest 0f3e07c0138f 2 weeks ago 220MB
2、基于模板导出和导入镜像
导出:将镜像保存为本地文件
[root@ren7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE testcentos v1 ecc0a6432f9c 9 seconds ago 220MB centos latest 0f3e07c0138f 2 weeks ago 220MB [root@ren7 ~]# docker save -o centosv1.tar.gz testcentos:v1 [root@ren7 ~]# ls 6379_node.conf 6381_node.conf docker redis-5.0.0.tar.gz 6380.conf anaconda-ks.cfg docker.tar.gz redis-conf 6380_node.conf appendonly.aof original-ks.cfg yum-repo.sh 6381.conf centosv1.tar.gz redis-5.0.0
导入:将压缩包文件导入到本地镜像列表
[root@ren7 ~]# docker rmi ecc0a6432f9c Untagged: testcentos:v1 Deleted: sha256:ecc0a6432f9c6316ebbd4e15fc6bc0442eb29494af65b0dca2a0fc6752996edf Deleted: sha256:c8506e27435fc2760072784cc424b69b864ea51588bb69caecbb755eb38f6b03 [root@ren7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 0f3e07c0138f 2 weeks ago 220MB [root@ren7 ~]# docker load -i centosv1.tar.gz(或者使用 --input 选项) fe459c65539a: Loading layer 2.56kB/2.56kB Loaded image: testcentos:v1 [root@ren7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE testcentos v1 ecc0a6432f9c 8 minutes ago 220MB centos latest 0f3e07c0138f 2 weeks ago 220MB
简单来说,容器是镜像的运行实体。所不同的是它带有额外的可写层。
3、基于 Dockerfile 文件创建
Dockerfile 是一个文本文件(可以理解为脚本),用来配置 image,记录了镜像构建的所有步骤;每一条指令的内容就是描述该层应当如何构建。Docker 根据 该文件生成二进制的 image 文件。如何可以生成 image 文件?如果你要推广自己的软件,势必要自己制作 image 文件。
dockerfile编写的注意事项:
1)# 备注
2)指令参数,指令的大小写不敏感
3)第一个非注释行必须是 FROM 指令
4)编写Dockerfile必须在一个目录下进行,这个目录称之为 工作目录(WORKSPACE)
5)Dockerfile文件命令的首字母可以大写也可以小写,但必须是dockerfile名
6)制作镜像所要用的文件必须放在工作目录或者工作目录的子目录之下,不能放在父目录
7)可以通过隐藏文件 .dockeringnore 来指定不要放入到镜像中的文件,一行是一个文件,可以用通配符
8)基于dockerfile做镜像,本质上还是基于一个现有的镜像做新镜像
用 Dockerfile 创建 centos-with-vim,其内容则为:
[root@ren7 ~]# mkdir new [root@ren7 ~]# cd new/ [root@ren7 new]# pwd /root/new [root@ren7 new]# vim dockerfile ################################# FROM centos:latest RUN yum install vim -y #################################
build:创建镜像
-t:为镜像指定名字
.:指明 build context 为当前目录,我们也可以通过 -f 参数指定 Dockerfile 的位置
[root@ren7 new]# docker build -t newcentos:8 . Sending build context to Docker daemon 2.048kB Step 1/2 : FROM centos:latest ---> 0f3e07c0138f Step 2/2 : RUN yum install vim -y ---> Running in 3e8de88d981d CentOS-8 - AppStream 1.4 MB/s | 6.0 MB 00:0 CentOS-8 - Base 1.0 MB/s | 7.9 MB 00:0 CentOS-8 - Extras 514 B/s | 2.1 kB 00:0 Last metadata expiration check: 0:00:01 ago on Mon Oct 21 11:15:12 2019. Dependencies resolved. ========================================================================== Package Arch Version Repository ========================================================================== Installing: vim-enhanced x86_64 2:8.0.1763-10.el8 AppStream Installing dependencies: gpm-libs x86_64 1.20.7-15.el8 AppStream vim-common x86_64 2:8.0.1763-10.el8 AppStream vim-filesystem noarch 2:8.0.1763-10.el8 AppStream which x86_64 2.21-10.el8 BaseOS Transaction Summary ========================================================================== Install 5 Packages Total download size: 7.8 M Installed size: 30 M Downloading Packages: (1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm 34 kB/s | 39 kB 00:0 (2/5): vim-enhanced-8.0.1763-10.el8.x86_64.rpm 847 kB/s | 1.4 MB 00:0 (3/5): which-2.21-10.el8.x86_64.rpm 197 kB/s | 49 kB 00:0 (4/5): vim-filesystem-8.0.1763-10.el8.noarch.rp 50 kB/s | 48 kB 00:0 (5/5): vim-common-8.0.1763-10.el8.x86_64.rpm 2.6 MB/s | 6.3 MB 00:0 -------------------------------------------------------------------------
...下载过程
从这步开始就是镜像真正的构建过程。 首先 Docker 将 build context 中的所有文件发送给 Docker daemon。build context 为镜像构建提供所需要的文件或目录。Dockerfile 中的 ADD、COPY 等命令可以将 build context 中的文件添加到镜像。此例中,build context 为当前目录 /root/,该目录下的所有文件和子目录都会被发送给 Docker daemon。
所以,使用 build context 就得小心了,不要将多余文件放到 build context,特别不要把 /、/usr 作为 build context,否则构建过程会相当缓慢甚至失败。
[root@ren7 new]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE newcentos 8 96089ebca1c2 4 minutes ago 286MB testcentos v1 ecc0a6432f9c About an hour ago 220MB centos latest 0f3e07c0138f 2 weeks ago 220MB
Docker 会缓存已有镜像的镜像层,构建新镜像时,如果某镜像层已经存在,就直接使用,无需重新创建。在前面的 Dockerfile 中添加一点新内容,往镜像中复制一个文件:
[root@ren7 new]# echo "Long time no see" > hello [root@ren7 new]# ls dockerfile hello [root@ren7 new]# vim dockerfile
#################################################### FROM centos:latest RUN yum install vim -y COPY hello /root/
####################################################
下面列出了 Dockerfile 中最常用的指令,完整列表和说明可参看官方文档。
FROM:指定 base 镜像。
MAINTAINER:设置镜像的作者,可以是任意字符串。
COPY:将文件从 build context 复制到镜像。
COPY 支持两种形式:
COPY src dest #shell格式
COPY ["src", "dest"] #exec格式
注意:src 只能指定 build context 中的文件或目录。
ADD:与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz 等),文件会被自动解压到 dest。(自带解压缩功能)
ENV:设置环境变量,环境变量可被后面的指令使用。例如:
...
ENV MY_VERSION 1.3
RUN apt-get install -y mypackage=$MY_VERSION
...
EXPOSE:指定容器中的进程会监听某个端口,Docker 可以将该端口暴露出来。我们会在容器网络部分详细讨论。
VOLUME:将文件或目录声明为 volume。
WORKDIR:为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。
RUN:在容器中运行指定的命令,RUN 指令通常用于安装应用和软件包。
CMD:容器启动时运行指定的命令。
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效。CMD 可以被 docker run 之后的参数替换。
ENTRYPOINT:设置容器启动时运行的命令,可让容器以应用程序或者服务的形式运行。
Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。CMD 或 docker run 之后的参数会被当做参数传递给 ENTRYPOINT。
通过dockerfile文件创建一个装有nginx的镜像及容器,完整的dockerfile如下:
[root@ren7 ~]# cd new/ [root@ren7 new]# ls dockerfile hello nginx-1.15.1.tar.gz nginx.conf [root@ren7 new]# cat dockerfile FROM centos:latest MAINTAINER Renyz RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel && \ yum clean all ADD nginx-1.15.1.tar.gz /tmp RUN cd /tmp/nginx-1.15.1 && \ ./configure --prefix=/usr/local/nginx && \ make -j 2 && make install && \ rm -rf /tmp/nginx-1.15.1 COPY nginx.conf /usr/local/nginx/conf EXPOSE 80 CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
[root@ren7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx v1 11a0d1b90f00 18 hours ago 394MB centos latest 0f3e07c0138f 2 weeks ago 220MB [root@ren7 ~]# docker history 11a0d1b90f00 IMAGE CREATED CREATED BY SIZE COMMENT 11a0d1b90f00 18 hours ago /bin/sh -c #(nop) CMD ["/usr/local/nginx/sb… 0B 6b3ffbb573c8 18 hours ago /bin/sh -c #(nop) EXPOSE 80 0B 1cb194871282 18 hours ago /bin/sh -c #(nop) COPY file:04bb4d8c1c49d16e… 857B ea7098225924 18 hours ago /bin/sh -c cd /tmp/nginx-1.15.1 && ./con… 5.1MB 8163dc35c7dc 18 hours ago /bin/sh -c #(nop) ADD file:b197ae6ec0899d784… 6.11MB c1e74c1c6c97 18 hours ago /bin/sh -c yum install -y gcc gcc-c++ make o… 164MB f1a043873ea0 18 hours ago /bin/sh -c #(nop) MAINTAINER Renyz 0B 0f3e07c0138f 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 2 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B <missing> 2 weeks ago /bin/sh -c #(nop) ADD file:d6fdacc1972df524a… 220MB [root@ren7 ~]# docker run -itd -p 8081:80 nginx:v1 /bin/bash [root@ren7 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b100566abdd9 nginx:v1 "/bin/bash" 18 hours ago Up 4 hours 0.0.0.0:8081->80/tcp vibrant_joliot 3abace6c9603 centos:latest "/bin/bash" 21 hours ago Exited (0) 18 hours ago awesome_snyder
四、docker的使用(容器)
1、创建容器,create命令是创建并不是启动容器
docker creat -it centos:7
2、查看所有状态的容器
docker ps -a docker ps
[root@ren7 ~]# docker ps --help Usage: docker ps [OPTIONS] List containers Options: -a, --all 显示所有容器 (默认只显示正在运行的容器) -f, --filter filter Filter output based on conditions provided --format string Pretty-print containers using a Go template -n, --last int 显示最后创建的容器 (includes all states) (default -1) -l, --latest 显示最新创建的容器(includes all states) --no-trunc Don't truncate output -q, --quiet 只显示容器的ID -s, --size 显示总文件大小
3、启动已停止的容器
docker start CONTAINERID
[root@ren7 ~]# docker start --help Usage: docker start [OPTIONS] CONTAINER [CONTAINER...] Start one or more stopped containers Options: -a, --attach Attach STDOUT/STDERR and forward signals --detach-keys string Override the key sequence for detaching a container -i, --interactive Attach container's STDIN
4、运行一个容器
docker run -ti docker.io/centos:7 /bin/bash
创建并运行一个容器 ,此时你会直接被切换到容器中
ctrl+d//exit #退出,并且容器也退出
ctrl+p+q #退出容器,并且保持容器up的状态
-t #分配一个伪终端
-i #让容器的标准输入持续打开
-rm #表示退出容器时,容器一起删除
-v #指定volumes,格式:宿主机共享目录:容器目录
-p #小p 端口映射(容器的端口映射为宿主机的端口)
--link #添加链接到另一个容器
用/bin/bash环境显示
5、以后台守护进程形态运行(用 -d 参数实现)
docker run -dti docker.io/centos:7
6、终止容器
docker stop NAME/ID docker kill NAME/ID
7、重启容器
docker restart NAME/ID
需要注意,非持久后台守护状态的虚拟机,在重启后当你查看时还是关闭状态
8、删除容器
语法: docker rm 参数 NAME NAME …
#docker rm -f NAME/ID
-f #强制删除处于运行中的容器
-l #删除链接,保留容器
-v #删除挂载的数据卷
补充:一次性删除全部已经退出的容器
[root@ren7 ~]# docker rm $(docker ps -aq)
较为严谨的写法:
[root@ren7 ~]# docker stop $(docker ps -aq) 555bbbf9c8e7 b100566abdd9 3abace6c9603 [root@ren7 ~]# for id in `docker ps -a | grep Exited | awk -F " " '{print $1}'`;do docker rm $id;done 555bbbf9c8e7 b100566abdd9 3abace6c9603
9、进入容器
登录容器的方法有三种:(exec -it、attach、nsenter)
(1)docker exec 是在容器中打开新的终端,并且可以启动新的进程
docker exec -it NAME/ID /bin/bash
[root@ren7 ~]# docker exec --help Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] Run a command in a running container Options: -d, --detach 分离模式:在后台运行命令--detach-keys string Override the key sequence for detaching a container -e, --env list Set environment variables -i, --interactive 启动为交互模式--privileged Give extended privileges to the command -t, --tty 分配一个终端-u, --user string Username or UID (format:<name|uid>[:<group|gid>]) -w, --workdir string Working directory inside the container
(2)docker attach直接进入容器 启动命令的终端,不会启动新的进程
注意:会导致当退出时,自动停止容器(不建议使用)
[root@ren7 ~]# docker run -d centos:latest /bin/bash -c "while true;do sleep 1;echo I_am_docker;done" 555bbbf9c8e7d314c31b823e99188c13ab6ff7bc266c9c70f7ce5c802bf40586 [root@ren7 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 555bbbf9c8e7 centos:latest "/bin/bash -c 'while…" 10 seconds ago Up 10 seconds blissful_edison b100566abdd9 nginx:v1 "/bin/bash" 19 hours ago Up 6 hours 0.0.0.0:8081->80/tcp vibrant_joliot 3abace6c9603 centos:latest "/bin/bash" 22 hours ago Up 33 minutes awesome_snyder [root@ren7 ~]# docker attach 555bbbf9c8e7 I_am_docker I_am_docker I_am_docker I_am_docker
...
[root@ren7 ~]# docker exec -it 555bbbf9c8e7 /bin/bash
[root@555bbbf9c8e7 /]#
(3)基于nsenter进入
第一步:启动容器
第二步:获取容器的pid
[root@ren7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 555bbbf9c8e7 centos:latest "/bin/bash -c 'while…" 8 minutes ago Up 4 minutes blissful_edison b100566abdd9 nginx:v1 "/bin/bash" 19 hours ago Up 6 hours 0.0.0.0:8081->80/tcp vibrant_joliot 3abace6c9603 centos:latest "/bin/bash" 23 hours ago Up 42 minutes awesome_snyder [root@ren7 ~]# docker inspect -f '{{.State.Pid}}' 555bbbf9c8e7 8989
第三步:登录容器
[root@ren7 ~]# nsenter -t 8989 -u -i -n -p [root@555bbbf9c8e7 ~]# ps PID TTY TIME CMD 7422 pts/0 00:00:00 bash 8167 pts/0 00:00:00 bash 8513 pts/0 00:00:00 bash 9436 pts/0 00:00:00 nsenter 9437 pts/0 00:00:00 bash 9467 pts/0 00:00:00 ps [root@555bbbf9c8e7 ~]# 登出 [root@ren7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 555bbbf9c8e7 centos:latest "/bin/bash -c 'while…" 10 minutes ago Up 6 minutes blissful_edison b100566abdd9 nginx:v1 "/bin/bash" 19 hours ago Up 6 hours 0.0.0.0:8081->80/tcp vibrant_joliot 3abace6c9603 centos:latest "/bin/bash" 23 hours ago Up 43 minutes awesome_snyder
退出时不会停止容器
-t #从中获取名称空间的目标进程 -u #输入UTS名称空间(主机名等) -i #进入System V IPC命名空间 -n #输入网络命名空间 -p #输入pid命名空间
[root@ren7 ~]# nsenter --help 用法: nsenter [options] <program> [<argument>...] Run a program with namespaces of other processes. 选项: -t, --target <pid> 要获取名字空间的目标进程 -m, --mount[=<file>] 进入mount命名空间-u, --uts[=<file>] enter UTS namespace (hostname etc) -i, --ipc[=<file>] enter System V IPC namespace -n, --net[=<file>] enter network namespace -p, --pid[=<file>] enter pid namespace -U, --user[=<file>] enter user namespace -S, --setuid <uid> set uid in entered namespace -G, --setgid <gid> set gid in entered namespace --preserve-credentials do not touch uids or gids -r, --root[=<dir>] set the root directory -w, --wd[=<dir>] set the working directory -F, --no-fork 执行 <程序> 前不 fork -Z, --follow-context set SELinux context according to --target PID -h, --help 显示此帮助并退出 -V, --version 输出版本信息并退出
10、导入和导出容器
(1)导出容器:导出一个已经创建的容器到文件,不管容器是否运行
[root@ren7 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b100566abdd9 nginx:v1 "/bin/bash" 19 hours ago Up 5 hours 0.0.0.0:8081->80/tcp vibrant_joliot 3abace6c9603 centos:latest "/bin/bash" 22 hours ago Up 19 minutes awesome_snyder [root@ren7 ~]# docker export b100566abdd9 > nginxtest.tar [root@ren7 ~]# ls anaconda-ks.cfg new appendonly.aof nginxtest.tar yum-repo.sh
(2)将容器导入系统成为镜像
cat nginxtest.tar | docker import - test
11、查看容器日志
显示容器启动进程的控制台输出
docker logs -f NAME/ID
12、暂停容器
docker pause NAME/ID
13、取消暂停,继续运行容器
docker unpause NAME/ID
和容器相关的命令:
[root@ren7 ~]# docker container --help Usage: docker container COMMAND #container可省 Manage containers Commands: attach 将本地标准输入,输出和错误流附加到正在运行的容器 commit 根据容器的更改创建新镜像 cp 在容器和本地文件系统之间复制文件/文件夹 create 创建一个新的容器 diff 检查容器文件系统上的文件或目录的更改 exec 在正在运行的容器中运行命令 export 将容器的文件系统导出为tar存档 inspect 显示一个或多个容器的详细信息 kill 杀死一个或多个正在运行的容器 logs 获取容器的日志 ls 列出容器 pause 暂停一个或多个容器中的所有进程 port 列出端口映射或容器的特定映射 prune 删除所有已停止的容器 rename 重命名容器 restart 重启一个或多个容器 rm 删除一个或多个容器 run 在新容器中运行命令 start 启动一个或多个已停止的容器 stats 显示容器资源使用情况统计信息的实时流 stop 停止一个或多个正在运行的容器 top 显示容器的运行进程 unpause 取消暂停一个或多个容器中的所有进程 update 更新一个或多个容器的配置 wait 等待,直到一个或多个容器停止,然后打印退出代码