Docker容器

容器简介

容器是一个镜像的可运行的实例,可以使用Docker REST API或者CLI来操作容器,容器的实质是进程,但与直接在宿主机执行的进程不同,容器进程运行于属于自己的独立的命令空间。因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

查看容器

用到的命令为docker ps

1. 查看运行中容器

[root@ice ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

2. 查看所有容器

查看所有容器只需加上-a参数

[root@ice ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2703796a7188 nginx "nginx -g 'daemon ..." 6 minutes ago Up 6 minutes 80/tcp myngin

3. 创建&&运行容器

用到的命令为`docker run`,当利用docker来创建常见容器时,Docker在后台运行的标准操作包括

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读可写
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个IP地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

4. 创建时运行容器

创建一个busybox容器,并且打印出Hello World

[root@ice ~]# docker run -i -t busybox /bin/echo "Hello World"
Unable to find image 'busybox:latest' locally
Trying to pull repository docker.io/library/busybox ...
latest: Pulling from docker.io/library/busybox
8c5a7da1afbc: Pull complete
Digest: sha256:cb63aa0641a885f54de20f61d152187419e8f6b159ed11a251a09d115fdff9bd
Status: Downloaded newer image for docker.io/busybox:latest
Hello World

成功了打印了Hello World,那么这样就可以长久的运行容器嘛?答案当然是否

当我们想长久运行容器的时候还要加上-d让其在后台运行

[root@ice ~]# docker run -d nginx
008a544b9ac0492d57694b3b5d7d8a33b6e10394d739f34f61e1964d3c6f3609

使用docker ps查看正在运行的容器

[root@ice ~]# docker ps
CONTAINERID IMAGE COMMAND CREATED STATUS PORTS NAMES
008a544b9ac0 nginx "nginx -g 'daemon ..." 3 minutes ago Up 3 minutes 80/tcp gallant_volhard
  • 这里要注意,容器的运行跟容器的生命周期有关,也就是所`docker run`有关和`-d`参数无关。只要启动时执行的该命令不结束,容器也就不会退出。

5. 启动已存在的容器

用到的命令为docker start

使用docker ps -a查看所有容器

[root@ice ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2703796a7188 nginx "nginx -g 'daemon ..." 15 minutes ago Exited (0) 8 minutes ago mynginx
008a544b9ac0 nginx "nginx -g 'daemon ..." About an hour ago Up About an hour 80/tcp gallant_volhard
0422bd90fd5c busybox "sh" About an hour ago Exited (0) About an hour ago quizzical_payne

发现有两个容器SATUS是终止状态,选择启动Name为mynginx的容器

[root@ice ~]# docker start 2703796a7188
2703796a7188

查看运行中的容器

[root@ice ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2703796a7188 nginx "nginx -g 'daemon ..." 19 minutes ago Up 2 seconds 80/tcp mynginx
008a544b9ac0 nginx "nginx -g 'daemon ..." About an hour ago Up About an hour 80/tcp gallant_volhard

终止容器

用到的命令为docker stop

终止CONTAINER ID为2703796a7188容器

[root@ice ~]# docker stop 2703796a7188
2703796a7188

查看运行中的容器

[root@ice ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
008a544b9ac0 nginx "nginx -g 'daemon ..." About an hour ago Up About an hour 80/tcp gallant_volhard

登录容器

用到的命令为`docker exec`命令,以上面后台运行的nginx为例,登录一下它

查看运行文件

[root@ice ~]# docker exec -it 008a544b9ac0 ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
[root@ice ~]# docker exec -it 008a544b9ac0 ls bin
bash dmesg gzip mountpoint sh umount zfgrep
cat dnsdomainname hostname mv sh.distrib uname zforce
chgrp domainname ln nisdomainname sleep uncompress zgrep
chmod echo login pidof stty vdir zless
chown egrep ls pwd su wdctl zmore
cp false lsblk rbash sync which znew
dash fgrep mkdir readlink tailf ypdomainname

date findmnt mknod rm tar zcat
dd grep mktemp rmdir tempfile zcmp
df gunzip more run-parts touch zdiff
dir gzexe mount sed true zegrep

启动bash文件

[root@ice ~]# docker exec -it 008a544b9ac0 /bin/bash
root@008a544b9ac0:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@008a544b9ac0:/# exit
exit
[root@ice ~]#

- -i:以交互模式运行容器,通常与 -t 同时使用。

- -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。

- /bin/bash:表示载入容器后运行bash

· 为什么我要进行查询,而不是直接引用了/bin/bash?是因为不是所有的镜像都安装了shell,有的镜像需要使用/bin/sh运行

删除容器

容器在运行中是不能直接删除的,需要添加-f参数强制删除容器

强制删除运行中容器

[root@ice ~]# docker rm -f 008a544b9ac0
008a544b9ac0

查看运行中的容器

[root@ice ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

删除停止的容器

查看所有容器

[root@ice ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2703796a7188 nginx "nginx -g 'daemon ..." 33 minutes ago Exited (0) 9 minutes ago mynginx
0422bd90fd5c busybox "sh" About an hour ago Exited (0) About an hour ago quizzical_payne

删除容器

[root@ice ~]# docker rm 2703796a7188
2703796a7188

查看所有容器

[root@ice ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0422bd90fd5c busybox "sh" About an hour ago Exited (0) About an hour ago quizzical_payne

删除所有处于终止状态容器

docker rm $(docker ps -aq)


分享到:


相關文章: