03-Docker入门

03-Docker入门

在运行之前,首先通过如下命令确认Docker的状态

python 复制代码
sudo docker info

运行第一个容器

运行如下命令,运行我们的第一个centos容器,如果本地没有该镜像,就会自动下载。这里的两个参数,-i保证我们可以输入,-t可以提供一个终端,这样才会有一个交互式的shell。

python 复制代码
[root@node2 /]# docker run -i -t centos:7 /bin/bash
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:7

使用第一个容器

我们已经进入了这个容器,可以通过hostname查看机器名

python 复制代码
[root@e870712763e6 /]# hostname
e870712763e6

事实上,这个容器就是一个模拟的centos系统,

python 复制代码
[root@e870712763e6 /]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)

理论上你可以用他做任何事情,比如安装vim

python 复制代码
[root@e870712763e6 /]# yum update & yum install vim

退出容器:

python 复制代码
[root@e870712763e6 /]# exit

退出后容器就不在运行了,可以通过ps -a命令查看当前机器上的容器

python 复制代码
[root@node2 /]# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                      PORTS     NAMES
e870712763e6   centos:7      "/bin/bash"   10 minutes ago   Exited (0) 48 seconds ago             elastic_tu
a20d2750859a   hello-world   "/hello"      2 hours ago      Exited (0) 2 hours ago                keen_heyrovsky

容器命名

如果创建时没有指定名称,Docker会自动生成一个名称,比如上面的elastic_tu

可以在创建时使用如下命令命名:

python 复制代码
docker run --name my_centos7 -i -t centos:7 /bin/bash

也可以用rename修改名称

python 复制代码
docker rename elastic_tu my_centos7

可以看到已经改名成功

python 复制代码
[root@node2 /]# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                     PORTS     NAMES
e870712763e6   centos:7      "/bin/bash"   16 minutes ago   Exited (0) 7 minutes ago             my_centos7

启动已停止的容器

可以使用ID或Name来启动,启动后默认和上次的run命令一样

python 复制代码
[root@node2 /]# docker start my_centos7

此时容器已经运行了,通过docker ps命令可以看到

python 复制代码
[root@node2 /]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS         PORTS     NAMES
e870712763e6   centos:7   "/bin/bash"   22 minutes ago   Up 2 seconds             my_centos7

如果需要进入shell界面,需要使用attach命令

python 复制代码
[root@node2 /]# docker attach my_centos7

创建守护式容器

很多时候我们需要容器在退出后继续运行,此时就需要运行守护式容器,也即是daemonize container。可以通过下面命令创建:

python 复制代码
[root@node4 ~]# sudo docker run --name my_daemon -d centos:7 /bin/sh -c "while true; do echo hello world; sleep 1; done"
afe2544f583833e483f6cfe6b2bedaff936dca4548396b36a94b4e6665061834

运行此命令后,系统仅仅返回一个容器id,不会返回bash界面。可以通过docker ps命令看到这个运行中的容器

python 复制代码
[root@node4 ~]# docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS              PORTS     NAMES
afe2544f5838   centos:7   "/bin/sh -c 'while t..."   2 minutes ago   Up About a minute             my_daemon

查看守护式容器

可以通过docker logs命令查看日志

python 复制代码
[root@node4 ~]# sudo docker logs my_daemon
hello world
hello world
hello world
hello world

可以通过-f参数,-t加上时间戳进行跟踪(用ctrl+c退出

python 复制代码
sudo docker logs -ft my_daemon
2024-04-04T12:09:19.636861979Z hello world
2024-04-04T12:09:20.654969250Z hello world
2024-04-04T12:09:21.671809247Z hello world
2024-04-04T12:09:22.682771892Z hello world

用---tail参数可以跟踪最后10行内容

python 复制代码
sudo docker logs --tail 10 my_daemon

可以通过---log-driver参数指定日志输出位置,这样docker logs中就看不到日志了

python 复制代码
docker run --log-driver="Syslog" --name daemon2 -d centos:7 /bin ...后面还是输出hello

查看容器内的进程

使用docker top命令可以看到容器内运行了哪些进程

python 复制代码
[root@node4 ~]# docker top my_daemon
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                1600                1582                0                   19:58               ?                   00:00:01            /bin/sh -c while true; do echo hello world; sleep 1; done
root                2874                1600                0                   20:18               ?                   00:00:00            sleep 1

使用docker stats查看容器状态,如果有多个守护进程的话会一起显示

python 复制代码
docker stats 后面可以跟容器name 也可以不跟

在守护容器中运行其他进程

要在守护容器中启动其他进程,可以使用docker exec命令

python 复制代码
[root@node4 ~]# docker exec -d my_daemon touch /opt/newfile

以上命令创建一个空文件。我们也可以启动一个bash界面,然后看下刚刚创建的文件

python 复制代码
[root@node4 ~]# docker exec -t -i my_daemon /bin/bash
[root@afe2544f5838 /]# cd /opt
[root@afe2544f5838 opt]# ls
newfile

停止和自动重启守护式容器

使用docker stop命令来终止运行中的守护式容器,同样支持id和name

python 复制代码
root@node4 ~]# docker stop my_daemon

如果希望容器在错误退出后自动重启,可以使用---restart参数

python 复制代码
sudo docker run --restart=always --name alive_daemon -d centos:7 ......

可以指定退出代码为非0的值时,才会重启;同时可以指定重启次数

python 复制代码
--restart=on-failure:5

查看容器详情

ps命令可以查看容器的简单信息,详细信息可以通过inspect命令查看

python 复制代码
[root@node4 ~]# docker inspect my_daemon
[
    {
        "Id": "afe2544f583833e483f6cfe6b2bedaff936dca4548396b36a94b4e6665061834",
        "Created": "2024-04-04T11:58:37.93042412Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true; do echo hello world; sleep 1; done"
        ],
......后略

比如要查看ip地址,可以使用如下format命令(如果容器不在运行,IP地址会是一个空值

python 复制代码
[root@node4 ~]# docker inspect --format='{{ .NetworkSettings.IPAddress }}' my_daemon
172.17.0.2

删除容器

使用docker rm命令来删除容器(删除之前需要停止

python 复制代码
# 也支持id
docker rm my_daemon 

通过如下命令可以删除所有容器,生产环境慎用,否则准备提桶

python 复制代码
[root@node4 ~]# docker rm `docker ps -a -q`
d86aada3acab
5a3d7d0c0093

小结

本章学习了如何使用docker创建、启动、查看和删除容器。这是今后的基础。

相关推荐
Shepherd061933 分钟前
【Jenkins实战】Windows安装服务启动失败
运维·jenkins
Biomamba生信基地1 小时前
Linux也有百度云喔~
linux·运维·服务器·百度云
new_abc1 小时前
Ubuntu 22.04 ftp搭建
linux·运维·ubuntu
Algorithm15762 小时前
mac上使用docker搭建gitlab
macos·docker·gitlab
鹿鸣天涯2 小时前
‌华为交换机在Spine-Leaf架构中的使用场景
运维·服务器·网络
小白也有IT梦2 小时前
域名绑定服务器小白教程
运维·nginx
有梦想的咕噜2 小时前
Secure Shell(SSH) 是一种网络协议
运维·网络协议·ssh
dntktop2 小时前
免费,WPS Office教育考试专用版
运维
苹果醋33 小时前
C语言 strlen 函数 - C语言零基础入门教程
java·运维·spring boot·mysql·nginx
loong_XL4 小时前
automa 浏览器自动化工具插件
运维·自动化