一、安装docker
- 确定是CentOS7及以上版本
cat /etc/redhat-release
- 卸载旧版本
https://docs.docker.com/engine/install/centos/
yum安装gcc相关
yum -y install gcc
yum -y install gcc-c++
- 安装需要的软件包
yum install -y yum-utils
- 设置stable镜像仓库
- 官网要求(不推荐)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 阿里云(推荐)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新yum软件包索引
yum makecache fast
- 安装DOCKER CE
yum -y install docker-ce docker-ce-cli containerd.io
- 启动docker
systemctl start docker
- 测试
docker version
docker run hello-world
- 卸载
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
二、docker镜像相关命令
- 启动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
- 列出本地主机上的镜像
docker images
选项说明
选项 | 功能 |
---|---|
-a | 列出本地所有的镜像(含历史映像层) |
-q | 只显示镜像ID |
- 在仓库中查询某个镜像
docker search [OPTIONS] 镜像名字
选项说明
选项 | 功能 |
---|---|
--limit | 只列出N个镜像,默认25个 |
- 下载镜像(没有TAG就是最新版)
docker pull 镜像名字[:TAG]
- 查看镜像/容器/数据卷所占的空间
docker system df
- 删除镜像
docker rmi -f 镜像/ID
三、docker容器相关命令
- 新建+启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
选项说明
选项 | 功能 |
---|---|
--name="容器新名字" | 为容器指定一个名称 |
-d | 后台运行容器并返回容器ID,也即启动守护式容器(后台运行) |
-i | 以交互模式运行容器,通常与 -t 同时使用 |
-t | 为容器重新分配一个伪输入终端,通常与 -i 同时使用 |
-P | 随机端口映射,大写P |
-p | 指定端口映射,小写p |
-v | 宿主机路径与容器内路径映射 |
- 退出容器
run进去容器,exit退出,容器停止:
exit
run进去容器,ctrl+p+q退出,容器不停止:
ctrl + p + q
- 启动已停止运行的容器
docker start 容器ID或者容器名
- 重启容器
docker restart 容器ID/容器名
- 停止容器
docker stop 容器ID/容器名
- 强制停止容器
docker kill 容器ID/容器名
- 删除已停止的容器
- 一次性删除多个容器实例
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
- 查看容器日志
docker logs 容器ID
- 查看容器内运行的进程
docker top 容器ID
- 查看容器内部细节
docker inspect 容器ID
- 进入正在运行的容器并以命令行交互
docker exec -it 容器ID bash
是在容器中打开新的终端,并且可以启动新的进程用exit退出,不会导致容器的停止。
docker attach 容器ID
直接进入容器启动命令的终端,不会启动新的进程用exit退出,会导致容器的停止。
- 从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
- 导出容器
docker export 容器ID > 文件名.tar
导出容器的内容留作为一个tar归档文件[对应import命令]
- 导入容器
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]
四、docker常用命令
- 提交容器副本使之成为一个新的镜像
docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]]
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
五、DockerFile解析
Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
- 编写Dockerfile文件
案例(创建一个微服务镜像)
FROM openjdk:8
# 作者
MAINTAINER debei
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为traffic-sso-eureka-1.0-SNAPSHOT.jar
ADD traffic-sso-eureka-1.0-SNAPSHOT.jar traffic-sso-eureka-1.0-SNAPSHOT.jar
# 运行jar包
RUN bash -c 'touch /traffic-sso-eureka-1.0-SNAPSHOT.jar'
ENTRYPOINT ["java","-jar","/traffic-sso-eureka-1.0-SNAPSHOT.jar","--spring.config.location=/home/server/config/sso-eureka.yml"]
#暴露8080端口作为微服务
EXPOSE 8080
- docker build命令构建镜像
docker build -t 新镜像名字:TAG .
注意,上面TAG后面有个空格,有个点
- docker run依镜像运行容器实例
docker run -it 新镜像名字:TAG
DockerFile常用保留字指令
- FROM
基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from - MAINTAINER
镜像维护者的姓名和邮箱地址 - RUN
容器构建时需要运行的命令,RUN是在 docker build时运行,两种格式:shell格式、exec格式 - EXPOSE
当前容器对外暴露出的端口 - WORKDIR
指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点 - USER
指定该镜像以什么样的用户去执行,如果都不指定,默认是root - ENV
用来在构建镜像过程中设置环境变量 - ADD
将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包 - COPY
类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
COPY src dest
COPY ["src", "dest"]
<src源路径>:源文件或者源目录
<dest目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
- VOLUME
容器数据卷,用于数据保存和持久化工作 - CMD
指定容器启动后的要干的事情
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
和RUN命令的区别:CMD是在docker run 时运行,RUN是在 docker build时运行。
- ENTRYPOINT
指定一个容器启动时要运行的命令
类似于 CMD 指令,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序
如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
虚悬镜像
仓库名、标签都是<none>的镜像,俗称dangling image
查看
docker image ls -f dangling=true
删除所有的虚悬镜像
docker image prune
网友评论