docker、镜像、容器的简要关系
docker 是操作镜像和容器的一个工具;
镜像 是一个文件系统,镜像可以用来创建、传输、拷贝等,镜像本身是静态的,必须通过实例化来创建和运行容器;
容器 是运行镜像的一个环境,是一个进程,同一个镜像可以实例化并运行多个容器。
一、查看docker
查看docker版本信息
$ docker version
Client:
Version: 20.10.7
API version: 1.41
Go version: go1.13.8
Git commit: 20.10.7-0ubuntu5~20.04.2
Built: Mon Nov 1 00:34:17 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version: dial unix /var/run/docker.sock: connect: permission denied
查看docker状态
$ sudo docker info
Client:
Context: default
Debug Mode: false
Server:
Containers: 1
Running: 1
Paused: 0
Stopped: 0
Images: 1
Server Version: 20.10.7
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
...省略输出...
二、docker镜像
查看本地docker镜像列表
$ sudo docker images
或docker images ls
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kmre2 v2.0-220121.10 e7401f6cf406 8 weeks ago 1.55GB
搜索docker远程仓库上的镜像列表
$ docker search [镜像名称]
$ sudo docker search ubuntu
NAME(名称) DESCRIPTION(基本功能描述) STARS(下载次数) OFFICIAL(官方) AUTOMATED(自动运行)
ubuntu Ubuntu is a Debian-based Linux operati… 13901 [OK]
websphere-liberty WebSphere Liberty multi-architecture i… 283 [OK]
ubuntu-upstart DEPRECATED, as is Upstart (find other … 112 [OK]
neurodebian NeuroDebian provides neuroscience rese… 88 [OK]
open-liberty Open Liberty multi-architecture images… 51 [OK]
ubuntu-debootstrap DEPRECATED; use "ubuntu" instead 45 [OK]
ubuntu/nginx Nginx, a high-performance reverse prox… 36
ubuntu/apache2 Apache, a secure & extensible open-sou… 25
...省略输出...
更多docker命令
查看
docker --help
命令
获取/下载docker远程仓库上的镜像
$ docker pull [镜像名称]
$ sudo docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
a4b007099961: Pull complete
e2b610d88fd9: Pull complete
......
Digest: sha256:b2ae0f527005d99bacdf3a220958ed171e1eb0676377174f0323e0a10912408a
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
$ sudo docker images #可以发现,本地镜像增加了mysql
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 562c9bc24a08 3 days ago 521MB
kmre2 v2.0-220121.10 e7401f6cf406 2 months ago 1.55GB
查看镜像的详细信息
sudo docker image inspect 容器名:TAG
或者sudo docker image inspect 容器ID
$ sudo docker image inspect kmre2:v2.0-220121.10
$ sudo docker image inspect e7401f6cf406
导出镜像
$ sudo docker save mysql > mysql_latest.tar.gz
删除镜像
$ sudo docker rmi mysql
Untagged: mysql:latest
Untagged: mysql@sha256:b2ae0f527005d99bacdf3a220958ed171e1eb0676377174f0323e0a10912408a
Deleted: sha256:562c9bc24a0883226e994aabbd09fcb5621a4eadb510df749bc6dac40fa991e3
Deleted: sha256:922f7808fa33c2fbe942423d3feb9a6d7a5f94bec7b9ea0991ab6c2e2f847572
Deleted: sha256:83fffdb572261c1f2e9f19471bd1b508943c501ed370984b5cfd358bc755d2e9
Deleted: sha256:c79d74d1ae5d7c7238dc9e17c11c386fb3831bbeccda13d35692c487e830cb30
Deleted: sha256:890829e2a3ea27a0c97567b48b3ee2d35ec518c831445b52b3a9b9350a407b19
Deleted: sha256:dc2d56ca2bf65894556989944f5bb43be8c85b846a65f939f14db0a13faed901
Deleted: sha256:2bfa38aa4a121c3003184e53f583ae27b3644308bf97ddbc307f06a0d6d29c9a
Deleted: sha256:fa808b36c749c5f8b97a9fa391bba83e4d71a81089a671079f5e9964d41ef21c
Deleted: sha256:25deea191944f6927352c94aac19b93fe4f06032f6287f7a8e671d182bb939ac
Deleted: sha256:118be3e0025663818f84526b895923c708e254ea16704cfb6f72e3595769160f
Deleted: sha256:093b2e6fd07228b0ce4dcffdcd1bd5cd5cff4758e7a92f9ef00002c38593a550
Deleted: sha256:f43f525e5700c371aca941af470de540c77e9f668d5357a31b9d01e9d3d1e825
Deleted: sha256:4e7bd47e4668c217f6eeba3b515d55d485e069ec297e0d1f5b0d643eb0478c72
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kmre2 v2.0-220121.10 e7401f6cf406 2 months ago 1.55GB
导入本地镜像
$ sudo docker image load -i mysql_latest.tar.gz
4e7bd47e4668: Loading layer [==================================================>] 72.55MB/72.55MB
f0555419074a: Loading layer [==================================================>] 338.4kB/338.4kB
96534622c790: Loading layer [==================================================>] 9.556MB/9.556MB
ff20f82e147d: Loading layer [==================================================>] 4.087MB/4.087MB
3f69e3bbc6aa: Loading layer [==================================================>] 2.048kB/2.048kB
948c016bd7b0: Loading layer [==================================================>] 55.14MB/55.14MB
89f80e698b7c: Loading layer [==================================================>] 6.656kB/6.656kB
57be03d114e8: Loading layer [==================================================>] 3.584kB/3.584kB
353fea563082: Loading layer [==================================================>] 384.4MB/384.4MB
c7960100fd23: Loading layer [==================================================>] 5.632kB/5.632kB
a86d8ea6ddfa: Loading layer [==================================================>] 16.9kB/16.9kB
6b3b2a71e75e: Loading layer [==================================================>] 1.536kB/1.536kB
Loaded image: mysql:latest
更多镜像管理命令
查看
docker image --help
命令
三、docker容器
创建并启动(运行)容器
$ sudo docker run [选项] 镜像名
选项
-i 以交互模式运行容器,通常与 -t 同时使用;
-t 分配一个伪输入终端,通常与 -i 同时使用;
-d 后台运行容器,并返回容器ID;
-p 定端口映射,格式为:主机(宿主)端口:容器端口;
-P 随机端口映射,容器内部端口随机映射到主机的端口;
--name="XXX" 为容器指定一个名称;
$ sudo docker run -it mysql bash
root@f551663fe0f8:/# exit
exit
- 每执行一次
docker run
命令都将创建和启动(运行)一个新的容器,并具有不同的容器ID和容器名。- 在当前终端执行run创建一个容器后,执行exit命令会退出并关闭(停止运行,而不是删除)容器,而在其他终端进入容器后执行exit命令只会退出而不关闭容器。
- 当执行
docker run
命令后容器无法正常运行时,一般可以考虑是没有启用交互模式造成的。docker run
命令比较重要,但要想掌握,需要吸收更多知识才行。
查看系统中的容器列表
$ sudo docker ps [选项]
-a 选项,可以列出所有容器
-l 选项,可以列出最后一次运行的容器
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
74c766c91227 kmre2:v2.0-220121.10 "/init.kmre" 9 days ago Up 5 hours kmre-1000-hollowman
开启(运行)一个关闭(停止运行)的容器
$ sudo docker start 容器ID
关闭(停止运行)容器
$ sudo docker stop 容器ID
进入(登录)一个已经运行的容器
$ sudo docker exec -it 容器ID bash
删除容器
$ sudo docker rm 容器ID
默认只能删除关闭(停止运行)的容器,如要强制删除需用-f选项
批量删除多个已经关闭的容器可用sudo docker rm $(sudo docker ps -a)
命令