1. Docker命令
service docker start
: 启动dockerservice docker stop
: 停止dockerservice docker restart
:重启dockerservice docker status
: 查看docker状态systemctl enable docker
: 开机启动docker info
:查看docker概要信息docker --help
:查看docker帮助文档
2. 镜像常用命令
docker images
:列出docker下的所有镜像docker search XXXX
:从dockerhub上搜索镜像的名字docker pull XXXX
: 下载镜像(从换过的源),可以从dockerhub上搜索结果复制命令。注意:docker pull tomcat:latest
加版本号,默认latestdocker tag 当前镜像名:TAG 仓库地址/镜像名称:TAG
: 镜像打tagdocker push仓库地址/镜像名称:TAG
:镜像上传仓库docker rmi 镜像ID
:删除镜像,注意:(1)如果后台有容器运行,需要docker rmi -f 镜像ID
强制删除(2)docker rmi h1 h2
删除多个,用空格分开
3. 容器常用命令
docker run [optinos] IMAG
:新建并启动容器,如果本地仓库有image则直接生成容器实例,没有则从dockerhub拉取下来再生成容器实例。
options:
-d
:后台 运行容器 // 注意,这里直接单独-d如果没有程序在运行会立即自杀,必须有前台应用才会存活
--name
: 指定名字
-P
: 随机指定端口
-p
: 指定映射端口,eg:docker run -it -p 8888:8080 iamge (小写p,主机端口:容器端口)
-i
:以交互模式启动
-t
:为容器分配一个伪终端(-it 配合使用)docker ps
:查看所有正在运行容器
options:
-a
:查看所有的容器,包括当前正在运行的和曾经运行过的
-l
:查看上一个容器
-q
:只显示容器id- 在容器的命令行终端中,
exit
:关闭容器并退出;Ctrl+P+Q
:不关闭容器,退出(退出后怎么再次进入到容器的终端中,请看11) docker start 容器id或者容器名
:启动容器(docker ps -a
可以查看所有容器id,找到想要启动的容器id)docker restart 容器ID或者容器名
:重启容器docker stop 容器ID或者容器名
:停止容器docker kill 容器ID或者容器名
:强制停止容器,docker rm 容器ID或者容器名
:删除已停止的容器
options:
-f
:强制删除容器,不管容器是否在运行
如果想一次性删除所有容器,可以使用:docker rm -f $( docker ps -aq) //用ps查出所有id,传给rm 全部删除
docker logs -f -t --tail 容器ID
:查看容器日志,(-t加入时间戳 ,-f 刷新日志)docker top 容器ID
: 查看容器内部进程- 进入正在后台运行的容器,有两种方式:
(1)docker attach 容器ID
(2)docker exec 容器ID /bin/bash
两者的区别在于:docker attach 容器ID
会通过连接stdin,连接到容器内输入输出流,会在输入exit
后终止进程;docker exec 容器ID /bin/bash
会连接到容器,可以像SSH一样进入容器内部,进行操作,可以通过exit
退出容器,不影响容器运行。
此外,docker exec
实质上的作用是在运行的容器中执行命令,可以不进入容器就对容器执行相应的指令,
eg:docker exefc ID ls //不进入,执行ls命令
docker cp /目录/文件名 容器ID:容器目录
:复制文件至容器docker cp 容器ID:文件路径 本地路径
: 复制容器文件至本地
4. DockerFile
当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
-
从已经创建的容器中更新镜像,并且提交这个镜像。比如说当我们run一个容器后,对容器内容进行了修改时,可以保存此容器,作为一个新的镜像,具体的命令使用方式可以参照这样:
docker commit -m="描述" -a="作者" 容器ID 目标镜像名字:[标签名]
-
使用 Dockerfile 指令来创建一个新的镜像
4.1 Dockerfile常用指令
指令 | 描述 | 指令 | 描述 |
---|---|---|---|
FROM | 构造的新镜像是基于哪个镜像例如:FROM centos:v1 | COPY | 拷贝文件或者目录到镜像,用法同ADD例如:COPY ./startup.sh /startup.sh |
MAINTAINER | 维护者信息例如:MAINTAINER yanglin | ENTRYPOINT | 运行容器时执行的shell命令例如:ENTRYPOINT ["/bin/bash","-c","/startup.sh"]ENTRYPOINT /bin/bash -c ‘/startup.sh’ |
RUN | 构建镜像时运行的shell命令,例如:RUN [“yum”, “install”, “http”] RUN yum install httpd | VOLUME | 指定容器挂载点到宿主机自动生成的目录或者其他容器例如:VOLUME ["/path/to/dir"] |
CMD | 运行容器时执行的shell命令,例如:CMD ["-c","/startup.sh"] CMD ["/usr/sbin/sshd","-D"] CMD /usr/sbin/sshd -D | USER | 为RUN,CMD,ENTRYPOINT执行命令指定运行用户例如:USER www镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户。 |
EXPOSE | 指定于外界交互的端口,即容器在运行时监听的端口EXPOSE 8081 8082 | WORKDIR | 为RUN,CMD,ENTRYPOINT,COPY和ADD设置工作目录例如:WORKDIR /data |
ENV | 设置容器内环境变量例如:ENV MYSQL_ROOT_PASSWORD 123456 | HEALTHCHECK | 健康检查HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ |
ADD | 拷贝文件或者目录到镜像,如果是URL或者压缩包会自动下载或者自动解压例如:ADD hom* /mydir/ ADD test relativeDir/ | ARG | 在构建镜像时指定一些参数例如:FROM centos:6ARG age=100 |
形象说明:
FROM | 它的妈妈是谁(基础镜像) |
---|---|
MAINTAINER | 告诉别人,你创造了它(维护者信息) |
RUN | 你想让它干啥(把命令前面加上RUN) |
ADD | 往它肚子里放点东西(COPY文件,会自动解压) |
WORKDIR | 我是cd(当前工作目录) |
VOLUME | 给我一个存放行李的地方(目录挂载) |
EXPOSE | 我要打开的门是啥(端口) |
RUN | 奔跑吧 |
一图片概括,图片来自哔哩哔哩尚硅谷视频教程
4.2 构建步骤
总体步骤:
编写Dockerfile文件 -----> 编写DockerFile文件
docker build -----> 构建镜像
docker run -----> 使用镜像启动容器
DockerFile就是镜像的描述文件
- 构建DockerFile文件
FROM swr.cn-east-3.myhuaweicloud.com/algorithm-seed/algorithm-base
RUN mkdir /app
copy quartz.py /app
WORKDIR /app
CMD ["python","quartz.py"]
- 构建镜像
# 编译dockerfile,生成镜像
docker build -f /filepath/file -t namespace/name .
4.3 镜像导出
# 例如: docker save -o 要保存的文件名 要保存的镜像
docker save -o python-test.tar python-test-1
4.4 容器卷
容器卷简单来说就是保存容器中数据,使数据持久化,实现容器之间,主机与容器之间,共享数据。相当于挂载,可以使得主机与容器内同步更新!
创建容器卷的两种方式:
(1)直接使用命令,在创建镜像时直接添加容器卷。
eg:
docker run -it -v /主机绝对路径:/容器内目录 镜像名
docker run -it -v /主机绝对路径:/容器内目录:ro 镜像名
只读
(2)在dockerfile中编写,使用VOLUME指令
VOLUME ["/file1","/file2","/file3"]
该命令指定的是容器挂载点目录,而非是宿主机目录,该挂载点对应的宿主机目录为自动生成,这样是为例可移植性。
4.4.1 容器间传递共享
docekr run --volumes-from 容器名 镜像名
eg:
eg: docker run it --name dc02 --volumes-from dc01 zxd/centos //dc02 与dc01 共享文件!!
//思考:当dc01被kill ,文件是否还存在?——存在,且共享均保持