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

相关推荐
Java陈序员4 小时前
轻量强大!一款现代化的 Kubernetes 集群管理与监控工具!
云原生·容器·kubernetes
爱吃橘子橙子柚子1 天前
3CPU性能排查总结(超详细)【Linux性能优化】
运维·cpu
Sheffield2 天前
Docker的跨主机服务与其对应的优缺点
linux·网络协议·docker
Sheffield2 天前
Alpine是什么,为什么是Docker首选?
linux·docker·容器
马艳泽2 天前
win10下运行Start Broker and Proxy报错解决
docker
舒一笑3 天前
程序员效率神器:一文掌握 tmux(服务器开发必备工具)
运维·后端·程序员
NineData3 天前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
用户13573999256603 天前
Windows 从 0 搭建 WSL2 原生 AI 开发环境:Codex + Docker + VSCode
docker
vi_h3 天前
在 macOS 上通过 Docker 安装并运行 Ollama(详细可执行教程)
macos·docker·ollama
黑心老魔3 天前
通过 Docker 创建开发环境
docker·开发环境