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创建、启动、查看和删除容器。这是今后的基础。

相关推荐
爱丽_4 分钟前
Linux 安装 MySQL 与远程连接排障(yum 方案)
linux·运维·mysql
IT WorryFree8 分钟前
OpenClaw的运维命令
运维
落日漫游16 分钟前
Zabbix监控实战:Linux主机全流程配置
运维·开发语言·自动化
馨谙20 分钟前
Kubernetes 集群组件详解
云原生·容器·kubernetes
枕布响丸辣21 分钟前
Web 技术基础与 Nginx 网站环境部署超详细教程
运维·前端·nginx
Hi2024021721 分钟前
AI编程助手Claude Code、Codex、OpenCode一站式Docker环境
docker·容器·ai编程
新的算法25 分钟前
通过重装vCenter Server解决登录vCenter界面时,报“503 Service Unavailable“错误的问题
运维·vmware·虚拟化
Felven32 分钟前
麒麟信安系统忘记root密码解决说明
linux·运维·服务器
IMPYLH40 分钟前
Linux 的 base64 命令
linux·运维·服务器·bash·shell
minstbe41 分钟前
IC设计私有化AI助手实战:基于Docker+OpenCode+Ollama的数字前端综合增强方案(基础版)
前端·人工智能·docker