新建并启动容器
docker run
docker run [OPTIONS] IMAGE [COMMEND] [ARG...]
OPTIONS:
--name=[容器新名字] :为容器指定一个名称
-d:后台运行容器,并返回容器ID,也即启动守护式容器
-i:以交互模型运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i同时使用
-P:随机端口映射
-p:指定端口映射,有以下四种格式:
ip:host_port:container_port
ip:container_port
host_port:container_port
container_port
新建启动运行一个centos镜像的实例(即容器),并且进入该容器进行交互:
neil@linux-famw:~> docker run -it centos
[root@6c8275123500 /]#
[root@6c8275123500 /]#
[root@6c8275123500 /]# ll
total 28
-rw-r--r-- 1 root root 12076 Dec 5 01:37 anaconda-post.log
lrwxrwxrwx 1 root root 7 Dec 5 01:36 bin -> usr/bin
drwxr-xr-x 5 root root 360 Feb 17 14:06 dev
drwxr-xr-x 1 root root 1978 Feb 17 14:06 etc
drwxr-xr-x 1 root root 0 Apr 11 2018 home
lrwxrwxrwx 1 root root 7 Dec 5 01:36 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Dec 5 01:36 lib64 -> usr/lib64
drwxr-xr-x 1 root root 0 Apr 11 2018 media
drwxr-xr-x 1 root root 0 Apr 11 2018 mnt
drwxr-xr-x 1 root root 0 Apr 11 2018 opt
dr-xr-xr-x 269 root root 0 Feb 17 14:06 proc
dr-xr-x--- 1 root root 120 Dec 5 01:37 root
drwxr-xr-x 1 root root 124 Dec 5 01:37 run
lrwxrwxrwx 1 root root 8 Dec 5 01:36 sbin -> usr/sbin
drwxr-xr-x 1 root root 0 Apr 11 2018 srv
dr-xr-xr-x 13 root root 0 Feb 17 14:06 sys
drwxrwxrwt 1 root root 140 Dec 5 01:37 tmp
drwxr-xr-x 1 root root 106 Dec 5 01:36 usr
drwxr-xr-x 1 root root 160 Dec 5 01:36 var
[root@6c8275123500 /]#
[root@6c8275123500 /]#
[root@6c8275123500 /]#
从上面可以看到我们进入了这个容器centos实例,root用户,6c8275123500是容器id,这里将这个id作为了容器内的主机名。
我们在外部通过docker ps查看容器进程。
neil@linux-famw:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6c8275123500 centos "/bin/bash" 3 minutes ago Up 3 minutes elated_brown
neil@linux-famw:~>
另一边,如果我们在容器内 希望退出容器 并停止该容器,则输入exit。
[root@6c8275123500 /]#
[root@6c8275123500 /]#
[root@6c8275123500 /]# exit
exit
neil@linux-famw:~>
neil@linux-famw:~>
查看运行的容器
docker ps [OPTIONS]
-a 列出当前所有正在运行的容器 和 历史上运行过的容器
-l 显示最近创建的容器
-n 显示最近n个创建的容器。包括正在运行的和已经停止的。
-q 静默模式,仅显示容器号。多用于与其他命令组合使用,以方便批量处理容器。
--no-trunc 不截断输出。
(本文出自oschina博主happyBKs的博文:https://my.oschina.net/happyBKs/blog/3011199)
示例如下:单个字母的参数可以连写,比如-l -q可以写成-lq
neil@linux-famw:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6c8275123500 centos "/bin/bash" 5 minutes ago Exited (0) 39 seconds ago elated_brown
neil@linux-famw:~>
neil@linux-famw:~> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6c8275123500 centos "/bin/bash" 5 minutes ago Exited (0) 46 seconds ago elated_brown
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker ps -n 3
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6c8275123500 centos "/bin/bash" 6 minutes ago Exited (0) About a minute ago elated_brown
neil@linux-famw:~>
neil@linux-famw:~> docker ps -lq
6c8275123500
neil@linux-famw:~>
我们回过来看看容器内部的情况,则个centos没有装jdk,预装了python2。这与我的本地宿主机不同。
neil@linux-famw:~> docker run -it --name=centos-01 centos
[root@94769f89ea30 /]#
[root@94769f89ea30 /]# java -version
bash: java: command not found
[root@94769f89ea30 /]# python
Python 2.7.5 (default, Oct 30 2018, 23:45:53)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
[root@94769f89ea30 /]#
查看容器列表,可以看到容器id、对应的镜像名称、容器名称、创建容器的时间、容器状态等。
neil@linux-famw:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
94769f89ea30 centos "/bin/bash" 11 seconds ago Up 9 seconds centos-01
neil@linux-famw:~>
用不停止容器的方式推出容器交互模式
Ctrl + P, Q 从容器内以不关闭容器的方式退回宿主机。这与在容器内输入exit不同,exit是不仅推出容器而且关闭结束容器。
[root@94769f89ea30 /]#
[root@94769f89ea30 /]# neil@linux-famw:~>
neil@linux-famw:~>
这时候可以看到这个容器还活着呢。
neil@linux-famw:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
94769f89ea30 centos "/bin/bash" 10 minutes ago Up 10 minutes centos-01
neil@linux-famw:~>
启动一个已经关闭的容器
docker start [容器id]
如果我们想把一个容器启动,比如将刚才已经关闭的那个容器启动:
neil@linux-famw:~> docker ps -n 2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
94769f89ea30 centos "/bin/bash" 12 minutes ago Up 12 minutes centos-01
6c8275123500 centos "/bin/bash" 30 minutes ago Exited (0) 25 minutes ago elated_brown
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker start 6c8275123500
6c8275123500
neil@linux-famw:~>
neil@linux-famw:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
94769f89ea30 centos "/bin/bash" 12 minutes ago Up 12 minutes centos-01
6c8275123500 centos "/bin/bash" 30 minutes ago Up 9 seconds elated_brown
neil@linux-famw:~>
重启容器
docker restart
重启一个容器也类似:
neil@linux-famw:~> docker restart 94769f89ea30
94769f89ea30
neil@linux-famw:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
94769f89ea30 centos "/bin/bash" 18 minutes ago Up 3 seconds centos-01
6c8275123500 centos "/bin/bash" 35 minutes ago Up 5 minutes elated_brown
neil@linux-famw:~>
关闭停止容器
温柔型:docker stop [容器id或者容器名]
强制型:docker kill [容器id或者容器名]
neil@linux-famw:~> docker stop 94769f89ea30
94769f89ea30
neil@linux-famw:~>
neil@linux-famw:~> docker kill 6c8275123500
6c8275123500
neil@linux-famw:~>
neil@linux-famw:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
neil@linux-famw:~>
前者慢,后者快;前者类似正常关机,后者类似拔电源。
neil@linux-famw:~> docker ps -n 2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
94769f89ea30 centos "/bin/bash" 25 minutes ago Exited (137) About a minute ago centos-01
6c8275123500 centos "/bin/bash" 43 minutes ago Exited (137) About a minute ago elated_brown
neil@linux-famw:~>
neil@linux-famw:~> docker rm 6c8275123500
6c8275123500
neil@linux-famw:~> docker ps -n 2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
94769f89ea30 centos "/bin/bash" 26 minutes ago Exited (137) 2 minutes ago centos-01
neil@linux-famw:~>
neil@linux-famw:~> docker rm -f 94769f89ea30
94769f89ea30
neil@linux-famw:~>
删除全部容器
neil@linux-famw:~> docker rm -f $(docker ps -a -q)
neil@linux-famw:~> docker ps -a -q | xargs docker rm -f
xargs为linux命令可变参数