还以以我比较喜欢的Archlinux为例,正好它也提供了轻量级的docker镜像
首先我们要把镜像拉取到本地
拉取镜像
$ sudo docker pull archlinux
Using default tag: latest
latest: Pulling from library/archlinux
cb935d5e7494: Pull complete
0db807cf654f: Pull complete
ea1144bdd5f5: Pull complete
e029eb9f912a: Pull complete
4a944e1bfce9: Pull complete
ac07c34e00d1: Pull complete
Digest: sha256:55d38aa4a7da0af27d3a949a551e81fdb30f26fe241135e2024711fd2a5676d4
Status: Downloaded newer image for archlinux:latest
docker.io/library/archlinux:latest
执行完等待下载就会看到上面的结果,拉取成功
查看拉取的镜像
$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
jenkins/jenkins lts f669140ba6ec 13 days ago 711MB
archlinux latest 90aeadc1688f 6 weeks ago 418MB
hello-world latest bf756fb1ae65 9 months ago 13.3kB
通过镜像运行一个容器
$ sudo docker run -it --name archlinux 90aeadc1688f /bin/bash
[root@2d834e925afb /]#
看到容器已经启动了,命令提示符也转到了新的容器上面,接着执行的命令就是容器中的archlinux中执行
那怎么退出archlinux容器呢,exit
就好了
那上面执行的这个命令所有的参数都是什么意思呢:
-
-i
启动交互式容器的命令 -
-t
启动一个终端 -
--name
指定容器的名字,不可重复,如果不指定docker会贴心的给指定一个名字,我看了好几个名字,都是一个形容词加一个名人的姓,一看都知道是谁,比如determined_torvalds
,哈哈linux内核缔造者Linus Torvalds,名言:Talk is cheap,show me your code. -
90aeadc1688f
镜像的ID,也可以写成镜像名字archlinux
,推荐使用名字,清晰 -
/bin/bash
跟在镜像名或者ID后面的是命令,因为是一个交互式的终端,所以我们指定一个/bin/bash
也可以不指定,默认是/usr/bin/bash
多说一点,docker命令可以进行聚合,如上面所示的,完整写法应该是sudo docker run -i -t ...
查看所有启动过的容器
$ sudo docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f67d9581fcbc archlinux "/usr/bin/bash" 11 seconds ago Exited (1) 8 seconds ago archlinux
2d834e925afb 90aeadc1688f "/bin/bash" 3 hours ago Up 2 hours confident_varahamihira
88f0c81fffa6 f669140ba6ec "/sbin/tini -- /usr/…" 19 hours ago Up 2 hours 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp jenkins
a6d06bdacfb7 hello-world "/hello" 4 days ago Exited (0) 4 days ago beautiful_shockley
a07b1c26eba8 hello-world "/hello" 4 days ago Exited (0) 4 days ago eloquent_shirley
101da06ce0c1 hello-world "/hello" 7 days ago Exited (0) 7 days ago determined_torvalds
3db0e6cfc853 hello-world "/hello" 7 days ago Exited (0) 7 days ago charming_ardinghelli
启动一个已经停止的容器
当我们使用docker run
命令时,每次都是启动一个全新容器
那怎么启动一个停止的容器呢,docker start
比如上面我们看到NAME
为archlinux
、CONTAINER ID
为f67d9581fcbc
的容器
$ sudo docker start archlinux # 既可以是容器名,也可以是容器ID
archlinux
[king@coder ~]$
哎,等等,我们看到容器启动后没有进入容器的命令行,这是怎么回事呢
其实很简单,你可以用sudo docker container ls -a
或者sudo docker ps -a
查看容器是否启动
你会发现容器是启动了的,docker start
会让容器默认在后台运行,这个docker start
跟docker run
一样想要进入交互式,就要带上-i
参数
那你该问了,如果我刚始没有使用-i
参数启动了容器,怎么办?
Emmm……,关掉容器,重新使用正确的指令进入呗
开玩笑了,怎么可能呢,参见下个小章节吧!
如何进入后台运行的容器
有两个命令:docker attach
和docker exec
有什么区别呢?
前者进入容器使用exit
会停止运行的容器,后者则不会
具体的验证您可以进入容器再退出后,使用docker ps -a
查看对应容器的启动状态
两个命令都该怎么用演示如下:
-
docker attach
一个参数,容器名或者容器ID
$ sudo docker attach archlinux
[root@f67d9581fcbc /]#
我们看到已经进入了容器的可交互终端
-
docker exec
该命令需要两个参数,第一个容器名,第二个执行的命令,跟docker run
类似
$ sudo docker exec archlinux /bin/bash
[king@coder ~]$
哎,我们发现,没有进入到交互式终端,举一反三
$ sudo docker exec -it archlinux /bin/bash
[root@f67d9581fcbc /]# uptime
06:33:39 up 3:57, 0 users, load average: 0.12, 0.21, 0.15
停止和重启容器
命令扔在这儿,不用试了吧,都是一个参数,容器名或者容器ID
- 停止
docker stop
docker kill
跟我们在Linux
中执行kill -5
和kill -9
差不多 - 重启
docker restart
删除容器
-
docker rm
一个参数,容器名或者ID,可跟多个
查看删除镜像
- 查看
docker image ls
- 删除
docker rmi -f
一个参数,镜像ID,使用-f表示强制删除,因为镜像被容器所依赖