1. Docker 镜像操作
Docker运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像。
1. 获取镜像
- 从 Docker镜像仓库获取镜像的命令是 docker pull。其命令格式为:
docker pull [选项][Docker Registry 地址[:端口号]/]仓库名[:标签]
- 具体的选项可以通过 docker pull --help 命令看到,这里我们说一下镜像名称的格式。Docker 镜像仓库地址:地址的格式一般是<域名/IP>[:端口号]。默认地址是 Docker Hub。仓库名:如之前所说,这里的仓库名是两段式名称,即<用户名>/<软件名>。对于 DockerHub,如果不给出用户名,则默认为library,也就是官方镜像。
- 拉取ubuntu:16.04镜像
sudo docker pull ubuntu:16.04
2. 运行镜像
- 有了镜像后,我们就能够以这个镜像为基础启动并运行一个容器。以上面的 ubuntu:16.04为例,如果我们打算启动里面的 bash并且进行交互式操作的话,可以执行下面的命令。
sudo docker run -it --rm ubuntu:16.04 bash
-
-it:这是两个参数,一个是-i:交互式操作,一个是-t终端。 -
--rm:这个参数是说容器退出后随之将其删除。 -
ubuntu:16.04:这是指用 ubuntu:16.04 镜像为基础来启动容器。 -
bash: 放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。 -
最后,我们可以使用 exit 退出容器
进入容器和退出容器示例
3. docker常用的命令
- 要想列出已经下载下来的镜像,可以使用
docker image ls命令。列表包含了 仓库名标签、镜像 ID、 创建时间 以及 所占用的空间 。
docker image ls
# 或者下面也是一样的
docker images
- 查看镜像、容器、数据卷所占用的空间。
docker system df
- 仓库名、标签均为<none>的镜像称为 虚悬镜像(danglingimage),显示这类镜像:
docker image ls -f dangling=true
- 一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。
docker image prune
4. 删除本地镜像
- 如果要删除本地的镜像,可以使用
docker image rm命令,其格式为:
docker image rm [选项]<镜像1>[<镜像2>...]
其中,<镜像>可以是 镜像短ID、镜像长 ID、镜像名 或者 镜像摘要。
- 使用
docker image ls -q来配合docker image rm,这样可以批量删除希望删除的镜像。
docker image rm $(docker image ls -q ubuntu) #删除所有仓库名为 ubuntu 的镜像
- 或者删除所有在 ubuntu:16.04 之前的镜像:
docker image rm $(docker image ls -q -f before=ubuntu:16.04)
5. 保存和加载镜像信息
- 保存镜像
docker save -o xxxx.tar xxxxx:tag # 这里可以输入多个镜像
- 加载镜像
docker load -i xxxx.tar
2. Docker容器操作
容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。
1. 启动容器
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。因为 Docker的容器实是轻量级的,用户可以随时删除和新创建容器。
- 新建并启动
docker run
输出一个“Hello World”,之后终止容器。
docker run ubuntu:16.04 /bin/echo 'Hello world'
执行情况
root@necde-VirtualBox:~# docker run ubuntu:16.04 /bin/echo 'Hello World'
Unable to find image 'ubuntu:16.04' locally
16.04: Pulling from library/ubuntu
58690f9b18fc: Pull complete
b51569e7c507: Pull complete
da8ef40b9eca: Pull complete
fb15d46c38dc: Pull complete
Digest: sha256:1f1a2d56de1d604801a9671f301190704c25d604a416f59e03c04f5c6ffee0d6
Status: Downloaded newer image for ubuntu:16.04
Hello World
- 启动已终止容器
docker container start 或者 docker start
启动一个bash终端,允许用户进行交互
docker run -t -i ubuntu:16.04 /bin/bash
-t让Docker分配一个伪终端并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。
当利用 docker run 来创建容器时,Docker在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
2. 后台运行
很多时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加-d参数来实现。
- 如果不使用 -d 参数运行容器,比如 docker run hello-world 会把日志打印在控制台;
- 如果使用了 -d 参数运行容器,比如 docker run -d hello-word 不会输出日志,只会打印容器id(输出结果可以用 docker logs 查看);
例子:
root@necde-VirtualBox:~# docker run -d hello-world
bd386a192cb155b6aef39abbfae975678b9b7285fb1121d8b5734a458bba4d80
root@necde-VirtualBox:~# docker logs bd386a192cb155b6aef39abbfae975678b9b7285fb1121d8b5734a458bba4d80
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
注: 容器是否会长久运行,是和 docker run指定的命令有关,和-d 参数无关。
3. 停止运行的容器
- 可以使用 docker container stop 来终止一个运行中的容器。
- 终止状态的容器可以用 docker container ls -a 命令看到。
- 处于终止状态的容器,可以通过 docker container start 命令来重新启动。
- 此外, docker containerrestart 命令会将一个运行态的容器终止,然后再重新启动它。
4. 进入容器
- 在使用
-d参数时,容器启动后会进入后台,某些时候需要进入容器进行操作,使用docker exec命令可以进入到运行中。 - exec命令
-i -t参数
dockerexec后边可以跟多个参数,这里主要说明
-i -t参数。
只用-i参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。当-i -t 参数一起使用时,则可以看到我们熟悉的 Linux命令提示符。
docker exec -it 容器ID /bin/bash
4. 进入容器
- 在使用
-d参数时,容器启动后会进入后台,某些时候需要进入容器进行操作,使用docker exec命令可以进入到运行中。 - exec命令
-i -t参数
dockerexec后边可以跟多个参数,这里主要说明
-i -t参数。
只用-i参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。当-i -t 参数一起使用时,则可以看到我们熟悉的 Linux命令提示符。
docker exec -it 容器ID /bin/bash
5. 导出和导入容器
- 导出容器:
如果要导出本地某个容器,可以使用 docker export 命令。
- 导出容器:
docker export 容器ID>导出文件名.tar
- 导入容器
可以使用 docker import 从容器快照文件中再导入为镜像
- 导入容器
cat 导出文件名.tar |docker import - 镜像用户/镜像名:镜像版本
此外,也可以通过指定 URL 或者某个目录来导入
docker import http://lazyfennec.cn/image.tgz example/imagerepo
6. 删除容器
- 删除容器
可以使用 docker container rm 来删除一个处于终止状态的容器。
docker container rm ubuntu:16.04
如果要删除一个运行中的容器,可以添加-f参数。Docker 会发送 SIGKILL 信号给容器。
docker rm -f ubuntu:16.04
- 清理所有处于终止状态的容器
用 docker container ls -a命令可以查看所有已经创建的包括终止状态的容器,如果数量太多要一个个删除可能会很麻烦,用下面的命令可以清理掉所有处于终止状态的容夻。
docker container prune
如果觉得有收获,欢迎点赞和评论,更多知识,请点击关注查看我的主页信息哦~








网友评论