news 2026/6/24 19:15:33

Docker第三弹:Docker使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker第三弹:Docker使用

1.Docker怎么构建容器、安装容器?

2.Docker怎么管理镜像仓库?

3.两个镜像怎么合并?

4.Docker有哪些常用指令?

一、Docker 容器使用

Docker 容器是一个轻量级、可移植、自给自足的软件环境,用于运行应用程序。

Docker 容器将应用程序及其所有依赖项(包括库、配置文件、系统工具等)封装在一个标准化的包中,使得应用能够在任何地方一致地运行。

容器是操作系统级别的虚拟化,不需要运行完整的操作系统,启动和运行更为高效。

1.1 镜像与容器的关系

  • 镜像(Image):容器的静态模板,包含了应用程序运行所需的所有依赖和文件。镜像是不可变的。
  • 容器(Container):镜像的一个运行实例,具有自己的文件系统、进程、网络等,且是动态的。容器从镜像启动,并在运行时保持可变。

1.2 Docker客户端

Docker 客户端是与 Docker 守护进程(Docker Daemon)交互的命令行工具。

docker 客户端非常简单,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。

runoob@runoob:~# docker

可以通过命令docker command --help更深入的了解指定的 Docker 命令使用方法。

例如我们要查看docker stats指令的具体使用方法:

# docker stats --help

1.2.1 Docker 客户端命令

以下是常用的 Docker 客户端命令:

命令功能示例
docker run启动一个新的容器并运行命令docker run -d ubuntu
docker ps列出当前正在运行的容器docker ps
docker ps -a列出所有容器(包括已停止的容器)docker ps -a
docker build使用 Dockerfile 构建镜像docker build -t my-image .
docker images列出本地存储的所有镜像docker images
docker pull从 Docker 仓库拉取镜像docker pull ubuntu
docker push将镜像推送到 Docker 仓库docker push my-image
docker exec在运行的容器中执行命令docker exec -it container_name bash
docker stop停止一个或多个容器docker stop container_name
docker start启动已停止的容器docker start container_name
docker restart重启一个容器docker restart container_name
docker rm删除一个或多个容器docker rm container_name
docker rmi删除一个或多个镜像docker rmi my-image
docker logs查看容器的日志docker logs container_name
docker inspect获取容器或镜像的详细信息docker inspect container_name
docker exec -it进入容器的交互式终端docker exec -it container_name /bin/bash
docker network ls列出所有 Docker 网络docker network ls
docker volume ls列出所有 Docker 卷docker volume ls
docker-compose up启动多容器应用(从docker-compose.yml文件)docker-compose up
docker-compose down停止并删除由docker-compose启动的容器、网络等docker-compose down
docker info显示 Docker 系统的详细信息docker info
docker version显示 Docker 客户端和守护进程的版本信息docker version
docker stats显示容器的实时资源使用情况docker stats
docker login登录 Docker 仓库docker login
docker logout登出 Docker 仓库docker logout

常用选项说明:

  • -d:后台运行容器,例如docker run -d ubuntu
  • -it:以交互式终端运行容器,例如docker exec -it container_name bash
  • -t:为镜像指定标签,例如docker build -t my-image .

1.2.2 容器使用指令

获取镜像

如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:

$ docker pull [容器名]

参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu: ubuntu 镜像。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

要退出终端,直接输入exit:

查看运行中的容器
$ docker ps
查看全部容器

包含已经停止运行的容器。

$ docker ps -a
停止一个容器

停止容器的命令如下:

$ docker stop <容器 ID>

停止的容器可以通过 docker restart 重启:

$ docker restart <容器 ID>
启动一个已经停止的容器

查看所有的容器命令如下:

$ docker ps -a

点击图片查看大图:

使用 docker start 启动一个已停止的容器:

docker start [容器ID]
$ docker start b750bbbcfd88

停止的容器可以通过 docker restart 重启:

$ docker restart <容器 ID>
后台运行

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。

$ docker run -itd --name ubuntu-test ubuntu /bin/bash

点击图片查看大图:

注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令docker exec(下面会介绍到)。

进入容器

在使用-d参数时启动容器时,容器会运行在后台,这时如果要进入容器,可以通过以下命令进入:

  • docker attach:允许你与容器的标准输入(stdin)、输出(stdout)和标准错误(stderr)进行交互。

  • docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。

attach 命令

使用 docker attach 命令实例:

$ docker attach 1e560fca3906

注意:如果从这个容器退出,会导致容器的停止。

exec 命令

使用 docker exec 命令实例:

$ docker exec -it 243c32535da7 /bin/bash

注意:如果从这个容器退出,容器不会停止,这就是为什么推荐大家使用docker exec

更多参数说明请使用 docker exec --help 命令查看。

导出容器

如果要导出本地某个容器,可以使用docker export命令。

$ docker export 1e560fca3906 > ubuntu.tar

导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。

这样将导出容器快照到本地文件。

导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:

$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1

此外,也可以通过指定 URL 或者某个目录来导入,例如:

$ docker import http://example.com/exampleimage.tgz example/imagerepo
删除容器

删除容器使用docker rm命令:

$ docker rm -f 1e560fca3906

清理掉所有处于终止状态的容器

下面的命令可以清理掉所有处于终止状态的容器。

$ docker container prune
列出镜像列表

使用docker images来列出本地主机上的镜像。

runoob@runoob:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 14.04 90d5884b1ee0 5 days ago 188 MB php 5.6 f40e9e0f10c8 9 days ago 444.8 MB nginx latest 6f8d099c3adc 12 days ago 182.7 MB mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB httpd latest 02ef73cf1bc0 3 weeks ago 194.4 MB ubuntu 15.10 4e3b13c8a266 4 weeks ago 136.3 MB hello-world latest 690ed74de00f 6 months ago 960 B training/webapp latest 6fae60ef3446 11 months ago 348.8 MB

各个选项说明:

  • REPOSITORY:表示镜像的仓库源

  • TAG:镜像的标签

  • IMAGE ID:镜像ID

  • CREATED:镜像创建时间

  • SIZE:镜像大小

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用REPOSITORY:TAG 来定义不同的镜像

所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:

runoob@runoob:~$ docker run -t -i ubuntu:15.10 /bin/bash root@d77ccb2e5cca:/# 或者 docker run -it ubuntu:15.10 bash

参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
查找镜像

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为:https://hub.docker.com/

我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

runoob@runoob:~$ docker search httpd

NAME:镜像仓库源的名称

DESCRIPTION:镜像的描述

OFFICIAL:是否 docker 官方发布

stars:类似 Github 里面的 star,表示点赞、喜欢的意思。

AUTOMATED:自动构建。

删除镜像

镜像删除使用docker rmi命令,比如我们删除 hello-world 镜像:

$ docker rmi [镜像名]
$ docker rmi hello-world
构建镜像

我们使用命令docker build, 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

runoob@runoob:~$ cat Dockerfile FROM centos:6.7 MAINTAINER Fisher "fisher@sudops.com" RUN /bin/echo 'root:123456' |chpasswd RUN useradd runoob RUN /bin/echo 'runoob:123456' |chpasswd RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local EXPOSE 22 EXPOSE 80 CMD /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

runoob@runoob:~$ docker build -t runoob/centos:6.7 . Sending build context to Docker daemon 17.92 kB Step 1 : FROM centos:6.7 ---&gt; d95b5ca17cc3 Step 2 : MAINTAINER Fisher "fisher@sudops.com" ---&gt; Using cache ---&gt; 0c92299c6f03 Step 3 : RUN /bin/echo 'root:123456' |chpasswd ---&gt; Using cache ---&gt; 0397ce2fbd0a Step 4 : RUN useradd runoob ......

参数说明:

-t :指定要创建的目标镜像名

. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

使用docker images 查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec

runoob@runoob:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE runoob/centos 6.7 860c279d2fec About a minute ago 190.6 MB runoob/ubuntu v2 70bf1840fd7c 17 hours ago 158.5 MB ubuntu 14.04 90d5884b1ee0 6 days ago 188 MB php 5.6 f40e9e0f10c8 10 days ago 444.8 MB nginx latest 6f8d099c3adc 12 days ago 182.7 MB mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB httpd latest 02ef73cf1bc0 3 weeks ago 194.4 MB ubuntu 15.10 4e3b13c8a266 5 weeks ago 136.3 MB hello-world latest 690ed74de00f 6 months ago 960 B centos 6.7 d95b5ca17cc3 6 months ago 190.6 MB training/webapp latest 6fae60ef3446 12 months ago 348.8 MB
设置镜像标签

我们可以使用 docker tag 命令,为镜像添加一个新的标签。

runoob@runoob:~$ docker tag 860c279d2fec runoob/centos:dev

docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。

使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签。

runoob@runoob:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE runoob/centos 6.7 860c279d2fec 5 hours ago 190.6 MB runoob/centos dev 860c279d2fec 5 hours ago 190.6 MB runoob/ubuntu v2 70bf1840fd7c 22 hours ago 158.5 MB ubuntu 14.04 90d5884b1ee0 6 days ago 188 MB php 5.6 f40e9e0f10c8 10 days ago 444.8 MB nginx latest 6f8d099c3adc 13 days ago 182.7 MB mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB httpd latest 02ef73cf1bc0 3 weeks ago 194.4 MB ubuntu 15.10 4e3b13c8a266 5 weeks ago 136.3 MB hello-world latest 690ed74de00f 6 months ago 960 B centos 6.7 d95b5ca17cc3 6 months ago 190.6 MB training/webapp latest 6fae60ef3446 12 months ago 348.8 MB

参考文献:

https://www.runoob.com/docker/docker-container-usage.html

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 14:22:58

终极B站会员购抢票神器:告别手速焦虑,轻松抢到热门门票

终极B站会员购抢票神器&#xff1a;告别手速焦虑&#xff0c;轻松抢到热门门票 【免费下载链接】biliTickerBuy b站会员购购票辅助工具 项目地址: https://gitcode.com/GitHub_Trending/bi/biliTickerBuy 还在为B站会员购的热门门票抢不到而烦恼吗&#xff1f;每次开售瞬…

作者头像 李华
网站建设 2026/6/24 19:15:00

从Condat 2015到你的项目:十分钟搞定单纯形投影,解决概率分布约束问题

十分钟实战&#xff1a;用Python实现高效单纯形投影算法在机器学习与优化问题中&#xff0c;我们经常需要处理概率分布的约束条件——确保一组数值非负且总和为1。无论是主题模型中的词分布、推荐系统的排序分数归一化&#xff0c;还是自定义损失函数中的中间变量修正&#xff…

作者头像 李华
网站建设 2026/6/24 19:10:37

低成本实现金属质感:玻纤板喷漆改造全流程指南

1. 项目概述&#xff1a;从“太皇太后”到金属质感手头有个遥控器撑架&#xff0c;材料是块玻纤板&#xff0c;黄澄澄的&#xff0c;在电子市场里它有个更朴实的名字叫“绝缘板”。我私下给它起了个爱称——“太皇太后”&#xff0c;因为它实在是“太黄太厚”了。这颜色和质感&…

作者头像 李华
网站建设 2026/6/5 14:18:02

Go内存模型与GC机制:高性能编程的核心

1 内存模型 1.1 操作系统内存模型 在探讨Golang的存储模型之前&#xff0c;我们可以首先回顾一下操作系统中的多次存储模型设计。可以参看我的这篇文章的第二章节&#xff1a;原子操作CAS与锁实现-CSDN博客。有提到高于存储的体系结构 我们可以看出&#xff0c;从上至下依次是…

作者头像 李华
网站建设 2026/6/5 14:17:59

2.2 NUMA 与页面迁移:把页面搬到正确的地方

本篇目标&#xff1a;理解 Linux 如何在进程运行过程中把页面从一个 NUMA 节点迁移到另一个 NUMA 节点&#xff0c;同时保持用户虚拟地址不变。我们将从 NUMA 拓扑与内存访问延迟出发&#xff0c;深入 migrate_pages() 的核心流程、migration entry 的作用、自动 NUMA balancin…

作者头像 李华
网站建设 2026/6/5 14:17:04

明日方舟智能助手Arknights-Mower:5分钟快速上手完整指南

明日方舟智能助手Arknights-Mower&#xff1a;5分钟快速上手完整指南 【免费下载链接】arknights-mower 《明日方舟》长草助手 项目地址: https://gitcode.com/gh_mirrors/ar/arknights-mower 想要从繁琐的基建收菜和日常任务中解放出来吗&#xff1f;Arknights-Mower作…

作者头像 李华