Docker学习笔记02

目录

[toc]

2.1 Docker守护程序

安装完Docker后,需要确认Docker的守护进程是否运行,Docker是以root权限运行它的守护程序,进而可以处理普通用户无法完成的操作(比如挂载文件系统)。 docker程序是Docker守护进程的客户端程序, 同样的也是需要以 root 的方式运行。

一般在安装完后,默认会立即启动Docker守护进程。

2.2 检查Docker守护进程是否正在运行

前面说了,安装完后,默认会立即启动Docker守护进程。 但是,如何确定是否运行了呢? 可以使用命令:sudo service docker status

如何让守护进程停止和启动呢? sudo service docker stop 停止运行守护进程 sudo service docker start 启动守护进程

docker info可以查看docker的信息

2.3 docker升级

升级docker非常简单,执行下面命令:

sudo apt-get update
sudo apt-get install docker-engine

2.4 开始使用Docker

有了上面的铺垫,就可以开始使用Docker。

  1. 使用前,请确保Docker已经准备就绪: 命令:sudo docker info可查看信息。 可以看到,所有有关Docker的信息全部展示出来了,包含了容器和镜像的数量,Docker使用的执行驱动和存储驱动、以及Docker的基本配置。
  2. 运行容器 sudo docker run -i -t ubuntu /bin/bash
bt@toto-pc:~$ sudo docker run -i -t ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
345e3491a907: Pull complete 
57671312ef6f: Pull complete 
5e9250ddb7d0: Pull complete 
Digest: sha256:cf31af331f38d1d7158470e095b132acd126a7180a54f263d386da88eb681d93
Status: Downloaded newer image for ubuntu:latest
root@60b9ae2cadd6:/# 
可以看到,先提示我们本地没有这个镜像,然后Docker会自行再服务器搜索,并下载。

下面逐步解析下这行命令的含义:
  - `docker run`是Docker的执行命令。
  - `-i -t`是两个命令行参数,`-i`标志保证容器中的STDIN是开启的;`-t`指让Docker为创建的容器分配一个**伪tty终端**,这样新创建的容器就又一个交互式的Shell。
  - 下面的是要告诉Docker要基于什么镜像创建容器,这里的`ubuntu`是一个常用镜像,也可叫**base镜像**
      这个镜像保存在`Docker Hub`中,由Docker公司提供,我们可以以该镜像为基础镜像构建自己的镜像。
  - 接着DOcker便在文件系统内部用该镜像创建了一个新容器,该容器拥有自己的网络、IP地址以及一个与宿主机进行通信的桥接网络接口。
  - `/bin/bash`是让Docker在新容器中运行什么命令,`/bin/bash`让其启动一个**Bash shell**,,就是这个`root@60b9ae2cadd6:/# `
  1. 使用Docker
  • 可以看到,我么以及以root用户登录到了新的容器,容器的ID是它:60b9ae2cadd6 ,没错就在这里root@60b9ae2cadd6:/#

    也可以输入hostname获得ID

root@60b9ae2cadd6:/# hostname
60b9ae2cadd6
  • 查看下/etc/hosts文件
root@60b9ae2cadd6:/# cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.2	60b9ae2cadd6    
  • 查看下容器中运行的进程
root@60b9ae2cadd6:/# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   4108  3448 pts/0    Ss   13:58   0:00 /bin/bash
root        15  0.0  0.0   5896  2884 pts/0    R+   14:19   0:00 ps -aux
  • 因为在国内。必须换个源!

    1. 备份:cp /etc/apt/sources.list /etc/apt/sources.list.bak
    2. 安装vim apt-get update && apt-get install vim 这步可能会很慢
    3. 进行修改vim /etc/apt/sources.list
    4. 将阿里源复制进去:
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse       
  • 退出镜像 输入:exit 为了确认是否退出,可以使用sudo docker ps -a命令查看 默认情况下sudo docker ps只能看到正在运行的容器,加了参数-a就可以看到所有容器了,而-l是列出最后一个运行的容器。 exit(0)代表的是正常退出
bt@toto-pc:~/code/dockerDemo$ sudo docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                          PORTS     NAMES
a485d513168c   ubuntu        "/bin/bash"   13 minutes ago   Exited (0) About a minute ago             romantic_jennings
60b9ae2cadd6   ubuntu        "/bin/bash"   13 days ago      Exited (129) 13 days ago                  stoic_agnesi
ec657654e703   hello-world   "/hello"      2 weeks ago      Exited (0) 2 weeks ago                    fervent_kalam
69237704f3ef   hello-world   "/hello"      2 weeks ago      Exited (0) 2 weeks ago                    hungry_kare

2.5 为容器起一个漂亮的名字

Docker会为我们创建的每一个容器自动生成一个随机的名称。但如果想指定一个名字,那就要使用--name参数

sudo docker run --name nice_name -i -t ubuntu /bin/bash

可以注意到docker也为我们生成了独一无二的CONTAINER ID,也可以使用ID来标识容器,不过名字还是更加好记些。

2.6 重新启动容器

sudo docker start nice_name 这个命令就可以重新启动这个叫nice_name的容器,当然也可以使用ID,方法是一样的。

2.7 创建守护式容器

刚才创建的那个被称为交互式容器,也可以创建长期运行的容器,这就叫守护式容器。 守护式容器(daemonized container)没有交互式会话,非常适合运行应用程序和服务。很多时候都需要以守护式来运行我们的容器。

sudo docker run --name daemon_c -d ubuntu /bin/bash -c "while true; do echo hello world; sleep 1; done"

可以看到上面的命令增加了-d参数,此参数会将容器放到后台运行。

可以看到加了-c参数,后面有跟了一段语句,主要是每隔1s,循环打印hello word

可以使用sudo docker ps,看下正在运行的容器是什么:

bt@toto-pc:~/code/dockerDemo$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
203c5dfb744d   ubuntu    "/bin/bash -c 'while…"   18 seconds ago   Up 17 seconds             daemon_c

要知道刚才容器是要循环打印hello word。可以使用sudo docker logs daemon_c看下是不是打印。

$ sudo docker logs daemon_c
hello world
hello world
hello world
......

可以看到确实是在打印hello word!但是可以看到Docker会输出最后几条日志项并返回,如果加上-f参数可以监控Docker日志 sudo docker logs -f daemon_c 可以使用ctrl+c退出日志跟踪 也可以使用:docker logs --tail 10 daemon_c 来获取日志的最后10行内容 也可以用docker logs --tail 0 -f daemon_c 命令来跟踪某个容器的最新日志而不必读取整个日志文件。 而且,还可以使用-t 标志为每条日志项加上时间戳, sudo docker logs -ft daemon_c

T12:40:24.014158565Z hello world
T12:40:25.016503202Z hello world
T12:40:26.018169080Z hello world
T12:40:27.122353849Z hello world
T12:40:28.124196208Z hello world
T12:40:29.126547039Z hello world
T12:40:30.135021935Z hello world
T12:40:31.136411233Z hello world
T12:40:32.138664963Z hello world
T12:40:33.141031077Z hello world
T12:40:34.143594792Z hello world
......

除了容器的日志,也可以查看容器内部运行的进程。要做到这一点,要使用sudo docker top daemon_c命令

bt@toto-pc:~/code/dockerDemo$ sudo docker top daemon_c
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                18935               18912               0                   20:29               ?                   00:00:00            /bin/bash -c while true; do echo hello world; sleep 1; done
root                20095               18935               0                   20:45               ?                   00:00:00            sleep 1

2.8 停止守护式容器

停止守护式容器,可以使用命令:sudo docker stop daemon_c

为了观察是否停止了,可以使用命令:sudo docker ps -n x显示最后x个容器

bt@toto-pc:~/code/dockerDemo$ sudo docker ps -n 1
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                            PORTS     NAMES
203c5dfb744d   ubuntu    "/bin/bash -c 'while…"   25 minutes ago   Exited (137) About a minute ago             daemon_c

2.9 自动重启容器

如果由于某种错误而导致容器停止运行,还可以通过--restart标志,让Docker自动重新启动该容器。 --restart标志会检查容器的退出代码,并据此来决定是否要重启容器。默认的行为是Docker不会重启容器。

sudo docker run --restart=always --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" 在本例中,–restart 标志被设置为always 。无论容器的退出代码是什么,Docker都会自动重启该容器。 除了always ,还可以将这个标志设为on-failure ,这样,只有当容器的退出代码为非0值的时候,才会自动重启。另外,on-failure 还接受一个可选的重启次数参数

2.10 深入了解容器

除了通过docker ps命令可以获取容器的信息,还可以使用docker inspect来获得更多的容器信息, sudo docker inspect daemon_c

bt@toto-pc:~/code/dockerDemo$ sudo docker inspect daemon_c
[
    {
        "Id": "203c5dfb744d88fbb1cde57112543c67d046b272f2f972f65ad59b63062314b8",
        "Created": "2021-05-23T12:29:59.145857347Z",
        "Path": "/bin/bash",
        "Args": [
            "-c",
            "while true; do echo hello world; sleep 1; done"
        ],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 137,
            "Error": "",
            "StartedAt": "2021-05-23T12:30:00.003650541Z",
            "FinishedAt": "2021-05-23T12:54:01.368370779Z"
        },
......

docker inspect 命令会对容器进行详细的检查,然后返回其配置信息,包括名称、命令、网络配置以及很多有用的数据。

3.11 删除容器

如果容器已经不再使用,可以使用docker rm命令来删除它们 sudo docker rm a485d513168c

删除所有容器: sudo docker rm sudo docker ps -a -q sudo docker ps -a -q 返回的是所有容器的id列表。 在使用docker rm就可以删除所有列表了。

使用sudo docker rmi <id/name>可以删除镜像

3.12 总结

  1. 使用:sudo service docker status可以看Docker守护进程的状态
  2. sudo service docker stop 停止运行守护进程
  3. sudo service docker start 启动守护进程
  4. 执行下面命令可以升级docker

     sudo apt-get update
     sudo apt-get install docker-engine
    
  5. 使用sudo docker info可查看容器信息。
  6. 使用sudo docker run -i -t ubuntu /bin/bash可以启动ubuntu这个容器,如果该容器不再本地,会自动去云端下载,并运行/bin/bash命令,进入交互式shell窗口。
  7. exit()可以退出交互式Docker容器
  8. 使用sudo docker ps -a命令查看所有容器的状态
  9. sudo docker ps只能看到正在运行的容器,加了参数-a就可以看到所有容器了;而加-l可以列出最后一个运行的容器。
  10. 使用--name参数,可以给容器增加名字;
  11. 使用sudo docker start <id/name> 命令可以重新启动这个叫<id/name>的容器;
  12. 增加-d参数会将容器放到后台运行。
  13. 使用sudo docker logs <id/name>可以查看容器日志。
  14. 使用sudo docker logs -f <id/name>-f参数可以实时监控Docker日志
  15. 使用docker logs --tail 10 <id/name> 可获取日志的最后10行内容
  16. 使用docker logs --tail 0 -f <id/name> 命令来跟踪某个容器的最新日志而不必读取整个日志文件。
  17. 使用-t 标志为每条日志项加上时间戳,sudo docker logs -ft <id/name>
  18. 停止守护式容器,可以使用命令:sudo docker stop <id/name>
  19. 可以通过--restart标志,让Docker自动重新启动该容器
  20. 通过docker ps命令可以获取容器的详细信息
  21. 使用docker rm <id/name>命令可以删除容器
  22. 使用sudo docker rm sudo docker ps -a -q可以删除所有容器
  23. 使用sudo docker rmi <id/name>可以删除镜像

请我喝咖啡

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,您说多少就多少

打开支付宝或微信扫一扫,即可请我喝咖啡哦