Docker 入门教程(镜像与容器的使用) 二
Docker 镜像与容器的使用
Docker 系统有两个程序:docker 服务端和 docker 客户端。其中 docker 服务端是一个服务进程,管理着所有的容器。docker 客户端则扮演着 docker 服务端的远程控制器,可以用来控制 docker 的服务端进程。大部分情况下 docker 服务端和客户端运行在一台机器上。
一 搜索可用的docker镜像
命令行的格式为:docker search 镜像名字
,例如:
$ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 9978 [OK]
dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 345 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 231 [OK]
consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 187 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 99 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 97 [OK]
neurodebian NeuroDebian provides neuroscience research s… 59 [OK]
..........
二 下载容器镜像
命令行的格式为:docker pull 镜像名字,例如:
# 下载 latest 版本的镜像
$ docker pull ubuntu
# 下载指定版本号的镜像
$ docker pull ubuntu:18.04
三 运行容器
命令行的格式为:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
。
1、 在容器中运行 hello world
$ docker run ubuntu:18.04 echo "hello world"
hello world
2、更新容器中的系统
$ docker run ubuntu:18.04 apt update
备注:apt update
命令执行完毕之后,容器就会停止,但对容器的改动不会丢失。
四 Docker 镜像、容器的查看与删除
1、查询镜像 docker images
,可以看到所有已经存在的镜像的 ID (IMAGE ID)。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 a2a15febcdf3 5 weeks ago 64.2MB
hello-world latest fce289e99eb9 8 months ago 1.84kB
2、查询容器:docker ps -a
,可以看到所有容器的 ID (CONTAINER ID)。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce8a07737e4f testnet:18.04 "/bin/bash" 5 days ago Exited (0) 5 days ago test1
df329130a249 ubuntu_base:18.04 "/bin/bash" 2 weeks ago Exited (0) 5 days ago test2
39d2edba3611 ubuntu:18.04 "/bin/bash" 2 weeks ago Exited (0) 2 weeks ago musing_lalande
3、先删除容器:docker rm 容器ID
$ docker rm ce8a07737e4f
4、再删除镜像:docker rmi 镜像ID
$ docker rmi 9764aa177ecf
注意:
- 删除前需要保证容器是停止的
docker stop test1
。 - 顺序是需要先删除容器,再删除镜像
- 需要注意删除镜像和容器的命令不一样。
$ docker rm CONTAINER_ID 删除容器
$ docker rmi IMAGE_ID 删除镜像
五 保存对容器的修改
当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。docker中保存状态的过程称之为 committing,它保存新旧状态之间的区别,从而产生一个新的版本。
命令行的格式为:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# 1、使用 docker ps -l 命令获得安装完ping命令之后容器的id
$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5d13254f0fb ubuntu:18.04 "apt update" 3 minutes ago Exited (0) 3 minutes ago trusting_meninsky
# 2、使用 commit 提交更改
$ docker commit e5d13254f0fb ubuntu-update:18.04
# 3、查看新提交的镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-update 18.04 3f68ea2d04da 6 seconds ago 91.4MB
六 后台运行容器并访问
1、后台运行容器
命令行的格式为:docker run -itd IMAGE [COMMAND] [ARG...]
参数说明:
- -i : 让容器的标准输入保持打开。
- -t : 分配一个伪终端并绑定到容器的标准输入上。
- -d : 让容器在后台运行。
Docker 中系统镜像的缺省命令是 bash,如果不加 -it bash 命令执行后会自动会退出。这是因为如果没有衔接输入流,本身就会马上结束。加 -it 后 docker 命令会为容器分配一个伪终端,并接管其 stdin/stdout 支持交互操作,这时候 bash 命令不会自动退出。
$ docker run -itd ubuntu:18.04 /bin/bash
$ docker ps -l
docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
77d851adc856 ubuntu:18.04 "/bin/bash" 8 minutes ago Up 8 minutes suspicious_golick
2、使用 exec 命令访问容器
无需任何配置访问容器最简单的两种方式:
# 容器外执行命令:`docker exec CONTAINER_ID Command`
$ docker exec 77d851adc856 ls -l /
# 容器内执行命令:`docker exec -it CONTAINER_ID /bin/bash
$ docker exec -it 77d851adc856 /bin/bash
# 退出容器:直接使用 exit 命令,退出后容器仍然在后台继续执行。