Docker命令官方帮助文档:https://docs.docker.com/engine/reference/run/ (建议有Docker命令基础再去看)
一、帮助命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令
二、镜像命令
docker images #查看所有本地的主机的镜像
eg:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest b0e0b0a92cf9 2 weeks ago 680MB
nginx latest 87a94228f133 3 weeks ago 133MB
hello-world latest feb5d9fea6a5 6 weeks ago 13.3kB
#解释:
REPOSITORY #镜像的仓库源
TAG #镜像的标签
IMAGE ID #镜像的ID
CREATED #镜像的创建时间
SIZE #镜像的大小
#可选项(常用)
-a #列出所有镜像(默认也会列出所有镜像)
-q #只显示镜像的ID
#了解更多
docker images --help
docker search 镜像名 #搜索镜像(建议去docker hub的web页面上搜)
eg:
[root@localhost ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11647 [OK]
mariadb MariaDB Server is a high performing open sou… 4433 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 864 [OK]
.......................
.......................
#可选项(常用)
--filter #根据提供的条件筛选输出
eg:
[root@localhost ~]# docker search mysql --filter=STARS=3000 #搜索出来的都是STARS大于3000的
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11647 [OK]
mariadb MariaDB Server is a high performing open sou… 4433 [OK]
#了解更多
docker search --help
docker pull 镜像名:tag #下载镜像
eg:
[root@localhost ~]# docker pull mysql
Using default tag: latest #如果不写tag,默认就是latest(最新版)
latest: Pulling from library/mysql
b380bbd43752: Already exists #分层下载,docker image的核心,联合文件系统
f23cbf2ecc5d: Pull complete
30cfc6c29c0a: Pull complete
b38609286cbe: Pull complete
8211d9e66cd6: Pull complete
2313f9eeca4a: Pull complete
7eb487d00da0: Pull complete
4d7421c8152e: Pull complete
77f3d8811a28: Pull complete
cce755338cba: Pull complete
69b753046b9f: Pull complete
b2e64b0ab53c: Pull complete
Digest: sha256:6d7d4524463fe6e2b893ffc2b89543c81dec7ef82fb2020a1b27606666464d87 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
#等价
docker pull mysql 等价于 docker pull docker.io/library/mysql:latest
#指定版本下载
docker pull mysql:5.7(这个版本我已经在docker hub查过有这个版本,不能随便写)
#了解更多
docker pull --help
docker rmi -f 镜像ID #删除镜像
docker rmi -f 镜像ID #删除指定镜像
docker rmi -f 镜像ID 镜像ID 镜像ID #删除多个镜像
docker rmi -f $(docker images -aq) #删除全部的镜像
三、容器命令
docker ps #列出当前正在运行的容器
可选参数(常用):
-a #列出正在运行的容器+历史运行过的容器
#了解更多
docker ps --help
docker run [可选参数] 镜像ID 启动后进入的目录 #新建容器并启动
#参数说明(常用)
--name="Name" #容器名称,如:tomcat01,tomcat02 用来区分容器
-d #后台方式运行
-it #使用交互方式运行,进入容器查看内容
-p #指定容器的端口,默认什么都不写的情况下,(该 P 是大写)随机指定端口
主机端口:容器端口(常用) eg:-p 8080:8080
启动后进入的目录 eg: /bin/bash 或 /root
eg:
[root@localhost ~]# docker run -it --name="mysql_01" mysql /bin/bash
root@39b60d099519:/# ls
bin dev entrypoint.sh home lib64 mnt proc run srv tmp var
boot docker-entrypoint-initdb.d etc lib media opt root sbin sys usr
root@39b60d099519:/#
#从容器内退回主机
输入 exit #容器停止并退出
按下 Ctrl+P+Q #容器不停止退出
#了解更多
docker run --help
docker rm 容器ID #删除指定的容器,不能删除正在运行的容器,如果要强制删除,则 rm -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -aq|xargs docker rm #删除所有的容器
docker start 容器ID #启动容器
docker restart 容器ID #重启容器
docker stop 容器ID #停止当前正在运行的容器
docker kill 容器ID #强制停止当前容器
四、其他常用命令
docker logs -tf --tail 数字 容器ID #显示容器的日志
常用参数:
-tf #显示日志
--tail #要显示的日志条数
eg:
docker logs -tf --tail 10 容器ID
#了解更多
docker log --help
docker top 容器ID #查看容器中进程信息
#了解更多
docker top --help
docker inspect 容器ID #查看镜像的元数据
#了解更多
docker inspect --help
我们通常容器都是使用后台方式运行的,后续在进入容器进行一些操作
方式一: docker exec -it 容器ID 要进入的目录 #进入当前正在运行的容器
eg:
docker exec -it 容器ID /bin/bash
方式二: docker attach 容器ID #进入当前正在运行的容器
docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach #进入容器正在执行的终端,不会启动新的进程
#了解更多
docker exec --help
docker attach --help
docker cp 容器ID:容器内路径 目的主机路径 #从容器内拷贝文件到主机上(不常用,知道就行)
eg:
docker cp 容器ID:/home/test.java /home
docker commit -m="提交的描述信息" -a "作者" 容器ID 新镜像名 tag #提交容器成为一个新镜像(不常用,知道就行)
五、容器数据卷
什么是容器数据卷技术?
容器之间有一个数据共享技术,就是Docker容器中的数据会同步到本地主机上,在本地主机上的操作的数据同步到Docker容器中,这就是容器数据卷技术
方式一:直接使用命令挂载 -v
docker run -it -v 主机目录:容器内目录
eg:
docker run -it -v /home/ceshi:/home centos /bin/bash
当容器启动后,我们可以通过 docker inspect 容器Id 查看Mounts挂载信息
上面这是指定路径挂载!
匿名挂载:
-v 容器内路径
eg:docker run -it -v /home centos /bin/bash
具名挂载(推荐使用):
-v 卷名:容器内路径
eg:docker run -it -v ceshi:/home centos /bin/bash
所有的docker 容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/... 下
方式二:是使用dockerfile在构建镜像时就挂载,说到dockerfile在说这个
拓展:
通过 ro 和 rw 改变读写权限
ro #只读
rw #可读可写
eg:
docker run -it -v ceshi:/home:ro centos /bin/bash
docker run -it -v ceshi:/home:rw centos /bin/bash
只要看到ro就说明这个路径只能通过主机来操作,容器内部是无法操作
多个容器实现数据共享
eg:
docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name myaql_01 mysql
docker run -d -p 3310:3306 --volumes-from myaql_01 -e MYSQL_ROOT_PASSWORD=123456 --name myaql_02 mysql
这个时候,两个mysql实现数据共享