1. 帮助启动类命令
# 启动docker
systemctl start docker
# 停止docker
systemctl stop docker
# 重启docker
systemctl restart docker
# 查看docker状态
systemctl status docker
# 开机启动
systemctl enable docker
# 查看docker概要信息
docker info
# 查看docker总体帮助文档
docker --help
# 查看docker命令帮助文档
docker 具体命令 --help
2. 镜像相关命令
2.1 查看本地库镜像
[root@yhx ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
其中:
- repository:表示镜像的仓库员
- tag:镜像的标签版本号
- image id:镜像id
- created:镜像创建时间
- size:镜像大小
注意:统一仓库源可以有多个tag版本,代表这个仓库源的不同个版本,我们使用repository:tag来定义不同的镜像
如果不指定一个镜像的版本标签,例如只使用ubuntu,docker将默认使用ubuntu:lated镜像
2.2 查找远程库镜像:
[root@yhx ~]# docker search tomcat
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an open source implementati… 3282 [OK]
tomee Apache TomEE is an all-Apache Java EE certif… 94 [OK]
bitnami/tomcat Bitnami Tomcat Docker Image 44 [OK]
arm32v7/tomcat Apache Tomcat is an open source implementati… 11
arm64v8/tomcat Apache Tomcat is an open source implementati… 7
rightctrl/tomcat CentOS , Oracle Java, tomcat application ssl… 7 [OK]
amd64/tomcat Apache Tomcat is an open source implementati… 3
jelastic/tomcat An image of the Tomcat Java application serv… 3
tomcat2111/pisignage-server PiSignage Server 3 [OK]
cfje/tomcat-resource Tomcat Concourse Resource 2
oobsri/tomcat8 Testing CI Jobs with different names. 2
chenyufeng/tomcat-centos tomcat基于centos6的镜像 1 [OK]
tomcatling/jupyterhub_aws 1
tomcat2111/bitbucket-pipelines-elasticsearch Elasticsearch for Bitbucket's Pipelines 0
tomcat2111/phpredisadmin This is a Docker image for phpredisadmin 0 [OK]
store/microsoft/defaultpublisher Zulu for Azure build of OpenJDK 0
softwareplant/tomcat Tomcat images for jira-cloud testing 0 [OK]
tomcatengineering/pg_backup_rotated Clone of martianrock/pg_backup_rotated but w… 0
s390x/tomcat Apache Tomcat is an open source implementati… 0
tomcatengineering/docker_swarm_exporter Prometheus metrics exporter for Docker Swarms 0
tomcat2111/redaxo Redaxo 0
tomcat2111/papercut-mf PaperCut MF Application Server 0
tomcat2111/nextcloud Nextcloud container with environment variabl… 0 [OK]
tomcat0823/auto1 0
tomcat2111/piwik Matomo (formerly Piwik) image 0
[root@yhx ~]#
# 只显示点赞数最多的5条
[root@yhx ~]# docker search --limit 5 redis
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store that… 10657 [OK]
bitnami/redis Bitnami Redis Docker Image 211 [OK]
bitnami/redis-sentinel Bitnami Docker Image for Redis Sentinel 34 [OK]
circleci/redis CircleCI images for Redis 12 [OK]
bitnami/redis-exporter
2.3 下载镜像
docker pull 镜像名字
# 上述等价于
docker pull 镜像名字:latest
#或者将上版本号
docker pull 镜像名字 [:tag]
[root@yhx ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
a2abf6c4d29d: Pull complete
c7a4e4382001: Pull complete
4044b9ba67c9: Pull complete
c8388a79482f: Pull complete
413c8bb60be2: Pull complete
1abfd3011519: Pull complete
Digest: sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
[root@yhx ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 7614ae9453d1 2 months ago 113MB
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
2.4 查看镜像、容器、数据卷所占空间
[root@yhx ~]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 2 1 112.7MB 112.7MB (99%)
Containers 1 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
2.5 删除镜像
docker rmi 镜像名称/镜像id
[root@yhx ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 7614ae9453d1 2 months ago 113MB
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
[root@yhx ~]# docker rmi redis
Untagged: redis:latest
Untagged: redis@sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339
Deleted: sha256:7614ae9453d1d87e740a2056257a6de7135c84037c367e1fffa92ae922784631
Deleted: sha256:49c70179bc923a7d48583d58e2b6c21bde1787edf42ed1f8de9e9b96e2e88e65
Deleted: sha256:396e06df5d1120368a7a8a4fd1e5467cdc2dd4083660890df078c654596ddc1c
Deleted: sha256:434d118df2e9edb51238f6ba46e9efdfa21be68e88f54787531aa39a720a0740
Deleted: sha256:2047f09c412ff06f4e2ee8a25d105055e714d99000711e27a55072e640796294
Deleted: sha256:13d71c9ccb39b206211dd1900d06aa1984b0f5ab8abaa628c70b3eb733303a65
Deleted: sha256:2edcec3590a4ec7f40cf0743c15d78fb39d8326bc029073b41ef9727da6c851f
[root@yhx ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
# 删除多个
docker rmi -f id1 id2
# 删除全部
docker rmi -f $(docker images -qa)
2.6 导出和导入镜像
此命令很重要,一般用于多台服务器发布,我们只需要将docker文件上传到一个服务器,测试无误后,save此镜像,再scp到其他服务器,在load,就有一个一模一样的镜像了。
- save:将镜像转为tar文件
- load:转入镜像的tar文件
[root@yhx ~]# docker save -o redis.tar 7614ae9453d1
[root@yhx ~]# ls
redis.tar
[root@yhx ~]# rm -rf redis.tar
[root@yhx ~]# docker save -o redis.tar redis
[root@yhx ~]# ls
redis.tar
[root@yhx ~]# docker load -i redis.tar
Loaded image: redis:latest
3. 容器相关命令
3.1 启动容器
docker run [options] images [command] [arg...]
options可选参数:
- –name:为容器指定一个名称
- -d:后台运行容器并返回容器id,也即启动守护式容器(后台运行)
- -i:以交互模式运行容器,通常与-t同时使用
- -t:为容器重新分配一个伪输入终端,通常与-i同时使用,也即启动交互式容器(前台有伪终端,等待交互)
- -P:随机端口映射
- -p:指定端口映射
3.1.1 端口映射:
比如我们想访问redis,但是redis在docker内部,所以我们必须通过一个端口访问docker,docker拿着这个端口对应的端口去内部访问。
写-p 6379:6380
,就是docker内部redis暴露的端口是6380,而宿主机对外暴露的端口是6379,要想访问docker内的redis,我们需要访问宿主机的6379端口
3.1.2 交互式终端启动:
可以进入到启动的容器内部
[root@yhx ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ba6acccedd29 5 months ago 72.8MB
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
[root@yhx ~]# docker run -it ubuntu /bin/bash
root@7a24369c5aa1:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
# 给容器指定名称
[root@yhx ~]# docker run --name=myU1 ubuntu
3.2 罗列所有正在运行的容器
docker ps [options]
options可选项:
- -a:罗列当前所有正在运行的容器+历史上运行过的
- -l:显示最近创建的容器
- -n:显示最近n个创建的容器
- -q:静默模式,只显示容器编号
[root@yhx ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b4f42505a03f hello-world "/hello" 6 seconds ago Exited (0) 5 seconds ago sad_snyder
7a24369c5aa1 ubuntu "/bin/bash" 8 minutes ago Exited (130) 2 minutes ago charming_carver
1fe574be2d72 ubuntu "/bin/bash" About an hour ago Exited (129) 31 minutes ago competent_fermat
40b652812796 hello-world "/hello" 5 hours ago Exited (0) 5 hours ago loving_wilson
3.3 退出容器
如何从容器内部退出?
- exit:run进入容器,exit退出,容器停止
- ctrl+p+q:run进入容器,ctrl+p+q退出,容器不停止
[root@yhx ~]# docker run -it --name=myU2 ubuntu
root@74bc8360c83d:/# exit
exit
[root@yhx ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@yhx ~]# docker run -it --name=myU3 ubuntu
root@0de743d939f5:/#
[root@yhx ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0de743d939f5 ubuntu "bash" 8 seconds ago Up 7 seconds myU3
[root@yhx ~]#
3.4 重启、停止、删除容器
# 重启容器
docker restart id/容器名
# 停止容器
docker stop id/容器名
# 强制停止容器
docker kill id/容器名
# 删除已经停止的容器
docker rm 容器名称/id
# 强制删除容器
docker rm -f 容器名称/id
3.5 启动守护式容器
docker run -d 容器名
我们尝试启动一下centos镜像:
[root@yhx docker]# docker run -d --name=centos8 centos
3debce674ad8a24f55adef4c874b09a13d5c9b7517eddd5ab39edee46c187c93
[root@yhx docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3debce674ad8 centos "/bin/bash" 3 seconds ago Exited (0) 2 seconds ago centos8
[root@yhx docker]#
通过docker ps -a
命令我们可以看到已经停止的容器。
于是疑惑产生了, -d 是保证容器在后台运行,为什么我的容器停止运行了呢?
前面提到过, docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
中有一个 COMMAND 参数,容器启动后会执行 COMMAND命令,它的默认值为 /bin/bash。也就是说容器在后台启动成功后,执行了 COMMAND 命令后直接关闭了。
了解到该原理后,我们可以通过在 docker run -d 后增加一个驻留在进程中长期运行的命令就可以保证容器不关闭了。
[root@yhx docker]# docker run -d --name=centos9 centos tail -f /dev/null
8da9a8358b679f83dac1a8a98b8620e60d37e3c1b8680483bd3448e4de1f12b5
[root@yhx docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8da9a8358b67 centos "tail -f /dev/null" 3 seconds ago Up 2 seconds centos9
3debce674ad8 centos "/bin/bash" 3 minutes ago Exited (0) 3 minutes ago centos8
[root@yhx docker]#
3.6 查询容器内部信息
# 查看容器日志
docker logs 容器id
# 查看容器内运行的进程
docker top 容器id
# 查看容器内部细节
docker inspect 容器id
3.7 进入正在运行的容器并以命令行交互
# 重新进入正在运行的容器
docker exec -it 容器id bashShell
# 重新进入正在运行的容器, 不建议使用
docker attach 容器id
区别:
- attach直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器的停止
- exec是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止
3.8 文件在容器与主机中互相拷贝
# 从容器中转出
docker cp 容器id:容器目录地址 主机目录地址
# 例
docker cp 371ce72fa7f5:/usr/local/a.txt /home/aaa.txt
3.9 导入和导出容器
- export导出容器:将容器的内容留作为一个tar归档文件,备份容器
- import导入容器:从tar包中的内容创建一个新的文件系统再导入为镜像
# 导出
docker export 容器id > 文件名.tar
# 导入
cat 文件名.tar | docker import -镜像用户/镜像名:版本号
[root@yhx ~]# docker export 1be58e734dc9 > a.tar
[root@yhx ~]# ls
a.tar
[root@yhx ~]# cat a.tar | docker import - a/a
sha256:c4b611df9300f0cddbfe0a1fb61cd4fabc40bf8c7478b7bfbb5d5c5a83b23477
[root@yhx ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
a/a latest c4b611df9300 11 seconds ago 109MB
redis latest 7614ae9453d1 2 months ago 113MB
ubuntu latest ba6acccedd29 5 months ago 72.8MB
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
[root@yhx ~]#
3.10 commit制作镜像
docker commit 提交容器副本使之成为一个新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器id 要创建的目标镜像名:[标签名]
进入ubuntu的镜像,可以看到目前不带vim命令:
root@a893f307cfa1:/# vim lib
bash: vim: command not found
安装vim:
apt-get update
apt-get -y install vim
提交我们具备vim命令的ubuntu容器:
[root@yhx ~]# docker commit -m="with vim" -a="yhx" a893f307cfa1 with-vim/with-vim:1.0
sha256:9b6363fb0c60770935be5327e94c19c0ae550bc478a8df7ef4c1978f34ad3e77
[root@yhx ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
with-vim/with-vim 1.0 9b6363fb0c60 6 seconds ago 175MB
a/a latest c4b611df9300 About an hour ago 109MB
tomcat latest fb5657adc892 2 months ago 680MB
redis latest 7614ae9453d1 2 months ago 113MB
ubuntu latest ba6acccedd29 5 months ago 72.8MB
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
[root@yhx ~]#
接下来启动我们新建的镜像,就可以包括vim功能了