1.查看内核版本 必须再7以上
uname -r
2.确保yum命令包最新
yum update
3.卸载旧版本(如果安装过旧版的)
yum remove docker-common docker-selinux docker-engine
4.安装需要的软件包
-
yum-utils 提供yum-config-manager功能
-
另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
5.设置yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
6.安装docker
sudo yum install docker-ce docker-ce-cli containerd.io
7.验证docker安装ok
docker version
8.启动docker 并设置开机启动
systemctl start docker 启动
systemctl enable docker 并设置开机启动
9.测试hello-world
docker run hello-world
# 先从本地获取,本地找不到会从远程仓库(默认国外仓库https://hub.docker.com/)拉取到本地再运行,下次可以直接本地运行
配置阿里云镜像仓库
默认远程仓库 docker hub ——国外仓库https://hub.docker.com/,访问国外主机速度较慢
步骤
1.登陆进入阿里云镜像服务 https://cr.console.aliyun.com/
登录后——>搜索容器镜像服务——>镜像加速器——>加速器地址(即配置地址)
2.在 /etc/docker 目录下找到daemon.json文件(没有就新建),将下面内容写入:
# 填入刚才的加速器地址
{
"registry-mirrors": ["https://fvt25l0y.mirror.aliyuncs.com"]
}
3.重启daemon
systemctl daemon-reload
4.重启docker服务
systemctl restart docker
5.测试是否配置完成
docker info # 查看docker基本信息
# 能看到以下信息,说明ok
......
Registry Mirrors:
https://fvt25l0y.mirror.aliyuncs.com/
......
二,基本操作
基本命令
启动docker: systemctl start docker
停止docker :systemctl stop docker
重启docker:systemctl restart docker
开机自启动docker:systemctl enable docker
查看docker概要信息:docker info
查看docker帮助文档:docker --help
查看docker版本信息:docker version
docker镜像
列出所有镜像:docker images
搜索镜像:docker search
下载镜像:docker pull 镜像名:版本号 (只写镜像名默认拉取最新的)
删除镜像:docker rmi 镜像名:版本号
-
如果有以该镜像运行的容器,则无法删除
-
docker rmi -f :强制删除——>先暂停容器,再去删除镜像
-
删除多个:docker rmi a:1.0 b1.0 不写版本号默认删除最新的
-
删除全部:docker rmi -f $(docker images -qa)
-
-q 只显示容器编号
-
-a 显示所有
-
docker 容器
创建并启动容器:docker run [OPTIONS] IMAGE 【容器中要执行的命令】[ARGS...]
通过镜像id来启动一个容器,不带命令时 默认以 /bin/bash 启动
-
普通启动
#命令:
docker run -it --name mycenos01 镜像id (推荐用id)
docker run -it --name mycenos01 镜像名:版本号
#说明
-t 表示以交互模式运行,进入容器,分配一个伪终端
--name 容器别名
镜像id 指定镜像模板
-
守护式方式启动
#命令:
docker run -di --name mycenos02 镜像id
#说明
-d 后台运行容器,并返回容器id
-
指定映射端口启动
# docker run -it -p 8888:8080 镜像id
#说明
8888:8080 : 8888为宿主机端口 8080为容器指定端口(一般会有默认端口)
-p 指定宿主机映射到容器的端口
-P 大写P:随机指定宿主机映射端口
列出容器 docker ps 【OPTIONS】
docker ps 查看正在运行的容器
docker ps -a 查看所有容器
docker ps -n 2 显示最近创建的2个容器
docker ps -f status=exited 查看停止的容器
退出容器 exit 或者 Ctrl + P + Q
exit 或 Ctrl + C 停止并退出容器
Ctrl + P + Q 容器还在运行,不停止,只退出终端
进入容器 docker attach 容器id(或名称)
启动容器 docker start 容器id(或名称)
重启容器 docker restart 容器id(或名称)
停止容器 docker stop 容器id(或名称)
-
强制关闭:docker kill 容器id(或名称) 不建议
删除容器 docker rm 容器id
-
正在运行的rm无法直接删除
-
强制删除:docker rm -f
-
删除多个:docker rm 容器a 容器b
-
删除所有:docker rm -f $(docker ps -qa)
进阶命令
docker exec
在运行的容器中执行命令:docker exec -it 容器名称(id) 执行命令
执行 /bin/bash 命令 可用来进入容器内
docker exec -it 容器id ls -l /sys
docker exec -it 容器id /bin/bash # 进入容器交互模式
docker exec -it 容器id sh /home/bin/xxx
docker exec -it redis redis-cli # 进入redis客户端
交互
docker logs
查看容器日志 docker logs 容器id
清除日志:可以进入目录直接删除,地址:
/var/lib/docker/containers/
docker top
查看容器进程 docker top 容器id
docker cp
宿主机和容器之间的文件拷贝 docker cp
# 宿主机文件 拷贝到 容器
docker cp 要拷贝的文件或目录 容器名称(或id) : 容器目录
# 拷贝到容器指定目录
dcoker cp /home/dog.jpg 容器id:/temp/
# 拷贝到容器指定目录,并重命名
dcoker cp /home/dog.jpg 容器id:/temp/doggg.jpg
# 容器内文件 拷贝到 宿主机
docker commit
定制自己的镜像 docker commit
提交运行中的容器为一个新的镜像模板
一般拉取的官方镜像,可能需改一些配置等,在作为一个新的镜像去运行容器。
自定义镜像:根据已存在运行的容器(一般容器内部修改过)生成新的镜像模板
docker commit -a='作者' -m '备注' 运行中的容器id 新镜像名
# 本地可以查看到新生成的镜像 docker images
# 然后就可以根据新的镜像来运行容器
docker push
发布自定制镜像 docker push
-
推送到 hub 服务器
首先到 https://hub.docker.com/ hub上注册自己的账号
# 1.登录hub
docker login
# 2.发布新镜像到自己的线上仓库
docker push 新镜像名(id)
-
推送到阿里云镜像
登录阿里云,里面会有操作指南
docker inspect
查看容器的元信息
"IPADDRESS" 容器分配的虚拟ip
"Source" 宿主机挂载目录
"Destination" 容器挂载目录
三,docker容器目录挂载
简介
容器目录挂载:
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行关联映射,这样就能实现两者间目录中 **数据双向自动同步**
作用
通过cp来同步数据太麻烦;
通过容器目录挂载,能够轻松实现代码上传,配置修改,日志同步等需求
实现
命令:
docker run -it -v /宿主机目录:/容器目录 镜像名
# 指定目录不存在时会自动创建
多目录挂载:
docker run -it -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名
挂载目录只读 read only
docker run -it -v /宿主机目录:/容器目录:ro 镜像名
注意:
如果你同步的是多级目录,可能会出现权限不足的提示;
这是因为Centos7中的安全模块selinux把权限禁掉了,需要添加 --privileged=true 来解决挂载的目录没有权限的问题
docker启动mysql57
1.拉取镜像后,用镜像id启动
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 9cfcce23593a
2.同步容器中的相关配置文件到宿主机指定目录
docker cp 容器id:/etc/mysql/conf.d /home/mysql
docker cp 容器id:/var/log /home/mysql
docker cp 容器id:/var/lib/mysql /home/mysql
3.停止容器后重新以文件挂载方式启动
挂载以上三个目录
docker stop 容器id
四,docker-file
定义:以脚本方式构建镜像
基础参数命令
FROM 基础镜像名 # 基于某个基础镜像
ENV key value # 设置环境变量(可以写多条)
RUN command # 构建容器时需要运行的命令,一般用来安装一些工具包
WORKDIR path_dir # 设置终端默认登陆进来的工作目录
EXPOSE port # 当前容器对外暴露的端口
ADD source_dir/file dest_dir/file # 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file # 和ADD相似,不能自动解压
VOLUME 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等
CMD # 指定容器启动时要运行的命令,假如有多个最后一个生效
使用dockerfile
1.编写一个名为mycentosDockerfile的文件
FROM centos # 基于某个基础镜像
MAINTAINER yangdisi<13875045745@163.com> # 作者信息
LABEL name="xxx centos image"
build-date="2020-06-23" # key-value形式,镜像的描述信息
ENV WORKPATH /home/ # 定义环境变量,可通过多行定义多个
WORKDIR $WORKPATH # 使用变量,指定工作空间
# 构建容器时执行一些命令,基础容器很精简,需要安装一些工具
RUN yum -y install net-tools
RUN yum -y install vim
EXPOSE 80 # 对外暴露的端口
CMD /bin/bash # 指定容器启动时要运行的命令,假如有多个最后一个生效
注意B: 当 ENTRYPOINT 后面跟CMD 时,CMD当作前者的参数使用:
2.构建DockerFile
构建会生成一个自定义的新镜像
docker build -f mycentosDockerfile -t 镜像名 . # 后面的 . 不能掉