帮助命令
-
显示docker的版本信息
docker --version
-
显示docker 的系统信息,包括镜像和容器的数量
docker info
-
帮助命令
docker --help
docker 官网相关的帮助文档: https://docs.docker.com/engine/reference/commandline/
镜像命令
-
docker images 查看所有本地的主机上的镜像
docker images
REPOSITORY 镜像的仓库源
TAG 镜像标签
IMAGE ID 镜像ID
CREATED 镜像的创建时间
SIZE 镜像的大小
-
查看images命令可选项
docker images -aq
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all 显示所有的镜像 --digests 显示摘要 -f, --filter 根据提供的条件过滤输出 -q, --quiet 只显示镜像ID
-
search查找镜像
docker search 搜索名称 例如:docker search mysql
-
search可选项
过滤查询,查询收藏大于5000的镜像docker search MySQL --filter=STARS=5000
Options:
-f, --filter filter Filter output based on conditions provided --format string Pretty-print search using a Go template --limit int Max number of search results (default 25) --no-trunc Don't truncate output
-
镜像下载
docker pull 镜像名称[:tag] docker pull mysql # 下载最新镜像 docker pull mysql:5.7 #下载指定版本的镜像
docker pull mysql 等价于 docker pull docker.io/library/mysql:latest
docker 采用分层下载方式,docker image的核心 联合文件系统
-
docker rmi 删除镜像
docker rmi -f 镜像ID # 删除指定的镜像 docker rmi -f 镜像ID1 镜像ID2 # 删除多个镜像 docker rmi -f $(docker images -aq) # 删除全部镜像
容器命令
当我们有了镜像,才可以创建容器
-
新建容器并启动
docker run [可选参数] imageID
#常用参数名 --name='Name' # 创建容器的名字,可以用来区分容器 -d # 后台交互方式运行 -it # 使用交互方式运行,进入容器查看内容 -p # 指定容器端口 -p 主机端口: 容器端口 -P # 随机指定端口 .......
-
列出容器
docker ps. # 列出当前运行的容器 docker ps -a # 列出当前运行的容器与历史运行过的容器
可选参数
-a # 列出当前运行的容器与历史运行过的容器 -n=? # 显示最近创建的容器 -q # 只显示容器的编号
-
退出容器
如果docker容器在启动的时候没有加 -d 参数
exit # 会直接停止容器并退出
Ctrl + P + Q # 容器不停止,并退出 -
删除容器
docker rm 容器id # 删除指定的容器, 不能删除正在运行的容器, docker rm -f 容器ID # 可以强制删除 rm -f docker rm $(docker ps -aq) # 删除所有的容器 docker ps -a -q | xargs docker rm # 删除所有的容器
-
启动与停止容器
docker start 容器id # 启动容器 docker restart 容器id # 重启容器 docker stop 容器id # 停止当前正在运行的容器 docker kill 容器id # 强制停止当前容器
其他命令
常见的坑:docker容器使用后台运行,就必须有一个前台进程,docker发现没有应用会自动停止容器。docker run -d -it 组合使用。
-
查看日志
docker logs -tf --tail 容器id -ft # 显示日志 --tail number # 要显示的日志条数
-
查看容器中的进程信息
docker top 容器id
-
查看镜像元数据
docker inspect 容器id
-
进入容器
方式1:docker exec -it 容器id /bin/bash
方式2:docker attach 容器id
区别:
docker exec # 进入容器后开启一个新的终端,可以在里面进行操作(常用)
docker attach # 进入容器正在执行的终端,不会开启新的进程 -
从容器拷贝文件
# 从容器拷贝文件到主机目录中 docker cp 容器id:容器内路径 目录路径 # 从主机拷贝文件到容器目录中 docker cp 目录路径 容器ID:容器内路径
-
修改运行中的docker容器的端口映射
方法一:删除原有容器,重新建新容器 这个解决方案最为简单,把原来的容器删掉,重新建一个。当然这次不要忘记加上端口映射。 优缺点:优点是简单快捷,在测试环境使用较多。缺点是如果是数据库镜像,那重新建一个又要重新配置一次,就比较麻烦了。 方法二:修改容器配置文件,重启docker服务 容器的配置文件路径 /var/lib/docker/containers/[hash_of_the_container]/hostconfig.json 其中的[hash_of_the_container]是docker镜像的hash值,可以通过docker ps或者docker inspect containername查看。 文件中其中有一项是PortBindings,其中8080/tcp对应的是容器内部的8080端口,HostPort对应的是映射到宿主机的端口9190。 8361/tcp对应的是容器内部的8361端口,HostPort对应的是映射到宿主机的端口9191。按需修改端口,然后重启docker服务,再启动容器服务就可以了。 systemctl restart docker 优缺点:这个方法的优点是没有副作用,操作简单。缺点是需要重启整个docker服务,如果在同一个宿主机上运行着多个容器服务的话,就会影响其他容器服务。 方法三:利用docker commit新构镜像 docker commit:把一个容器的文件改动和配置信息commit到一个新的镜像。这个在测试的时候会非常有用, 把容器所有的文件改动和配置信息导入成一个新的docker镜像,然后用这个新的镜像重起一个容器,这对之前的容器不会有任何影响。 1、停止docker容器 docker stop container01 2、commit该docker容器 docker commit container01 new_image:tag 3、用前一步新生成的镜像重新起一个容器 docker run --name container02 -p 80:80 new_image:tag 优缺点:这种方式的优点是不会影响统一宿主机上的其他容器,缺点是管理起来显得比较乱,没有第二种方法那么直观。
-
Docker 图形化界面管理工具
-
portainer Docker 图形化界面管理工具!提供了一个后台面板供我们操作
docker run -d -p 8888:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
-
rancher(CI/CD)
待补充
-
Commit 提交镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 镜像名:[tag]
容器数据卷
-
什么是容器数据卷
容器之间可以有一个数据共享的技术,Docker容器中产生的数据,同步到本地,这就是卷技术。目录的挂载,将我们容器内的目录挂载到Linux上面。
-
使用数据卷
docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口
-
实战:安装MySql
#获取mysql镜像 docker pull mysql:5.7 #运行容器,需要做数据挂载,安装启动mysql,需要配置密码!! docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
具名和匿名挂载
-
匿名挂载
# -v 容器内路径 docker run -d -P --name nginx01 -v /etc/nginx nginx #查看所有的volume(卷)的情况 docker volume ls
这种就是匿名挂载,我们在 -v只写了容器内的路径,没有写容器外的路径!
-
具名挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx # -P:表示随机映射端口 # 查看所有的volume(卷)的情况 docker volume ls
所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/自定义的卷名/_data下,如果指定了目录,docker volume ls是查看不到的。
-
区分三种挂载方式
三种挂载: 匿名挂载、具名挂载、指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的
数据卷容器
多个容器之间的数据卷共享是通过拷贝实现的,一个容器的数据卷删除或者容器删除不影响另外的容器访问,本质是数据备份。一旦数据持久化到本地,数据是不会删除的。
–volumes-from 挂载的父容器ID
docker run -it -d --name 容器名称 --volumes-from 已有的容器ID 镜像ID
容器之间可以做配置信息的传递
多个mysql容器实现数据共享
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d --name mysql02 --volumes-from mysql01 mysql:5.7
Dockerfile的使用
Dockerfile就是用来构建docker镜像的构建文件,通过这个脚本可以生成镜像,镜像是一层层的,脚本是一个个的命令,每个命令都是一层。
-
构建步骤:
1、编写一个dockerfile文件
2、docker build 构建称为一个镜像
3、docker run 运行镜像
4、docker push发布镜像(DockerHub、阿里云仓库)
-
基础知识:
1、每个保留关键字都是必须是大写字母
2、顺序执行从上到下
3、每一个指令都会创建提交一个新的镜像层,并提交。
4、# 表示注释
-
DockerFile的指令
FROM # from:基础镜像,一切从这里开始构建 MAINTAINER # maintainer:镜像是谁写的, 姓名+邮箱 RUN # run:镜像构建的时候需要运行的命令 ADD # add:步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录 WORKDIR # workdir:镜像的工作目录 VOLUME # volume:挂载的目录 EXPOSE # expose:保留端口配置 CMD # cmd:指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代 ENTRYPOINT # entrypoint:指定这个容器启动的时候要运行的命令,可以追加命令 ONBUILD # onbuild:当构建一个被继承DockerFile这个时候就会运行onbuild的指令,触发指令 COPY # copy:类似ADD,将我们文件拷贝到镜像中 ENV # env:构建的时候设置环境变量!
-
实战测试
99%的镜像都是从FROM scratch 这个基础镜像开始的,然后配置需要的软件和配置来进行构建。
# 1、编写dockerfile文件 vim DockerFile FROM centos MAINTAINER mfw<123456@163.com> ENV MYPATH /root WORKDIR $MYPATH RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD echo "----end----" CMD /bin/bash # 2、通过这个文件构建镜像 docker build -f DockerFile文件路径 -t 镜像名称:[tag] . # 3、查看历史构建过程 docker history 镜像ID