镜像获取
Docker容器运行前本地需要存在对应的镜像,如果本地不存在该镜像,Docker会自动从镜像仓库下载该镜像。下载命令如下:docker pull [参数] [仓库地址]:[端口] / [镜像名]:[标签]
1. 从默认的docker hub 拉取最新Nginx
docker pull nginx
2. 拉取指定版本的Nginx
docker pull nginx:1.2.6
3. 从私有仓库拉取Nginx
docker pull 10.1.177.1:5000/nginx:1.25.3
4. 拉取所有的镜像版本
docker pull -a ubuntu
我们前面讲过镜像是分层的,当我们使用docker pull拉取镜像的时候,可以看到是分层拉取的,并且每一层的sha256值和ID的前12位都会给出来。
docker pull nginx:1.20.2
1.20.2: Pulling from library/nginx
214ca5fb9032: Pull complete
50836501937f: Pull complete
d838e0361e8e: Pull complete
fcc7a415e354: Pull complete
dc73b4533047: Pull complete
e8750203e985: Pull complete
Digest: sha256:38f8c1d9613f3f42e7969c3b1dd5c3277e635d4576713e6453c6193e66270a6d
Status: Downloaded newer image for nginx:1.20.2
docker.io/library/nginx:1.20.2
运行镜像
有了镜像之后,我们就能以这个镜像为基础启动并运行一个容器,这里使用ubuntu为例进行讲解。
docker pull ubuntu
docker run -it --rm ubuntu bash
* docker run 运行容器
* -it:i表示以交互模式运行容器,t为容器分配一个伪输入终端。
* --rm:容器退出后自动删除该容器
* centos:以centos镜像为基础启动容器
* bash:放在镜像后的是命令,我们希望有一个交互式的shell,所以使用的是bash
列出镜像
查看我们已经拉取的镜像
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.20.2 0584b370e957 3 years ago 141MB
centos latest 5d0da3dc9764 3 years ago 231MB
依次讲解各项,列表中包含了仓库名,标签,镜像ID,创建时间 以及 所占用的空间。
镜像ID是镜像的唯一标识,一个镜像可以对应多个标签。譬如
docker tag nginx:1.20.2 my-nginx:lastest
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest a830707172e8 4 weeks ago 192MB
mynginx lastest 0584b370e957 3 years ago 141MB
nginx 1.20.2 0584b370e957 3 years ago 141MB
centos latest 5d0da3dc9764 3 years ago 231MB
可以看到两个 nginx 标签不同,但是都是同一个镜像ID,就像镜像ID的别名一样。
列出指定镜像
docker image ls centos
docker image ls nginx:lastest
docker images
仅列出镜像的ID
docker image ls -q
删除镜像
删除本地镜像使用 docker image rm 命令。具体格式为 docker image rm [选项] [镜像]
。镜像可以是长ID、短ID、镜像名、或者镜像摘要。
docker image ls redis -q
78f2dcef8858
docker image rm 78f
Untagged: redis:latest
Untagged: redis@sha256:1b7c17f650602d97a10724d796f45f0b5250d47ee5ba02f28de89f8a1531f3ce
Deleted: sha256:78f2dcef885829ef211319cc73c1a49cac9a9c4631f7c97edca5fe859828e7f3
Deleted: sha256:56874c8f0b80197882fcd729725ca9e535f03a289abce29fae52d2b4d9ad0c51
Deleted: sha256:8a84fb438e4fd057cba698d6fae922e5afb61023f3b90e73ed98bffc5a574873
Deleted: sha256:c8e0844ae83d40a85ff54d455d98be5c32d759ad7b1222129bfc86631e7e7fea
Deleted: sha256:8d1afdd0ef0ca18edbdad7b54776b574ccc9d9b7b40f24b1ff1e3a783c50c840
Deleted: sha256:450d31840ddbfa36cd0f0a3ab7f18e63543d526ecbab2e1b771bb0afb0ec69b5
Deleted: sha256:84cb843a532b672fab458c526fd6c6972ca6b7ccc794ef6d3e32f6c9a6a28995
Deleted: sha256:6c4c763d22d0c5f9b2c5901dfa667fbbc4713cee6869336b8fd5022185071f1c
docker image ls 默认列出的是短ID,一般取前三个字符,只要区别与其他镜像ID就可以了。镜像的完整ID一般用于Shell脚本中。
启动容器
启动容器有两种方式,一种是通过镜像启动,一种是将处于 Exited (0) 状态的容器重新启动。
使用 docker run 来创建容器时,Docker在后台的标准操作为:
- 检查本地是否存在镜像,不存在就从公有仓库拉取
- 利用镜像创建并启动一个容器
- 分配一个文件系统,在只读的镜像层外面挂载一层读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池中配置一个IP地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止。
举例
docker run -it centos /bin/bash
docker run -it centos echo "hello world"
启动已终止容器
docker container start 镜像ID
后台运行
-d参数实现容器后台运行。
终止容器
docker container stop 来终止一个运行中的容器。
进入容器
置于后台的容器需要操作。
- docker exec
- docker exec -it 容器ID
- 在容器中执行exit不会导致容器停止
- docker attach
- docker attach 容器ID
- 在容器中执行exit会导致容器停止。
导入和导出容器
docker export 容器ID > name.tar
cat name.tar | docker import - 镜像名:标签
删除容器
- ” docker container rm “删除处于终止状态的容器。
- “ docker container rm -f ”删除处于运行状态的容器,docker会发送sigkill信号给容器。
- “ docker container ls -a ”查看所有已经创建的容器,包括终止状态的容器。
- “ docker container prune ”删除所有处于终止状态的容器。
docker container rm -f 容器ID