注意:这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。
Docker准备及安装
yum 包更新到最新
sudo yum update -y
安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker后查看
sudo yum install docker-ce -y;
docker -v;
配置镜像加速
设置docker配置文件
docker安装后默认没有daemon.json这个配置文件,需要进行手动创建。
配置文件的默认路径:/etc/docker/daemon.json
mkdir -p /etc/docker;
cd /etc/docker;
vi daemon.json;
Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:
网易:https://hub-mirror.c.163.com
七牛云加速器(推荐):https://reg-mirror.qiniu.com
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
#重新启动服务
systemctl daemon-reload;
systemctl restart docker;
#检查加速是否生效
docker info;
Docker的启动与停止
systemctl 命令是系统服务管理器指令
#启动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 images
#字段解释
REPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像的创建日期(不是获取该镜像的日期)
SIZE:镜像大小
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
搜索镜像
#如果你需要从网络中查找需要的镜像,可以通过以下命令搜索
docker search 镜像名称
#字段解释
NAME:仓库名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
拉取镜像
#拉取镜像就是从中央仓库中下载镜像到本地
docker pull 镜像名称
#例如,我要下载centos7镜像
docker pull tutum/centos
删除镜像
#按镜像ID删除镜像
docker rmi 镜像ID
#删除所有镜像
docker rmi `docker images -q`
容器
查看容器
#查看正在运行的容器
docker ps
#查看所有容器
docker ps –a
#查看最后一次运行的容器
docker ps –l
#查看停止的容器
docker ps -f status=exited
创建与启动容器
- 创建容器常用的参数说明:
- 创建容器命令:docker run
- -i:表示运行容器
- -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
- --name :为创建的容器命名。
- -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
- -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
- -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
(1)交互式方式创建容器(退出命令后容器也退出)
#命令:docker run -it --name=容器名称 镜像名称:标签 /bin/bash
docker run -it --name=mycentos tutum/centos /bin/bash
#这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态
#退出当前容器
exit
(2)守护式方式创建容器(退出命令后容器不退出)
#命令:docker run -di --name=容器名称 镜像名称:标签
docker run -di --name=mycentos2 tutum/centos
#登录守护式容器方式:
#命令:docker exec -it 容器名称 (或者容器ID) /bin/bash
docker exec -it mycentos2 /bin/bash
#退出容器
exit
停止与启动容器
#停止容器
docker stop 容器名称(或者容器ID)
#启动容器
docker start 容器名称(或者容器ID)
文件拷贝
#如果我们需要将文件拷贝到容器内可以使用cp命令
docker cp 需要拷贝的文件或目录 容器名称:容器目录
#也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录
目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
#创建容器 添加-v参数 后边为 宿主机目录:容器目录,例如:
#宿主机创建目录
mkdir -p /usr/local/myhtml
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 tutum/centos
如果你共享的是多级的目录,可能会出现权限不足的提示。
这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题
查看容器IP地址
我们可以通过以下命令查看容器运行的各种数据
docker inspect 容器名称(容器ID)**
#也可以直接执行下面的格式化命令直接输出IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
#删除指定的容器(先停止容器)
docker rm 容器名称(容器ID)
迁移与备份
需求:我们需要在原有基础的环境增加新的配置,打包成镜像,再运行镜像,在这之上去增加配置
#我们可以通过以下命令将容器保存为镜像
docker commit mynginx mynginx_bak
#使用备份的镜像运行容器
docker run -di --name=mynginx2 -p 81:80 mynginx_bak
镜像备份
我们可以通过以下命令将镜像保存为tar 文件
docker save -o mynginx.tar mynginx_bak
首先我们先删除掉mynginx_bak镜像,删除镜像前需要先删除容器
#关闭容器
docker stop mynginx2
#删除容器
docker rm mynginx2
#删除镜像
docker rmi mynginx_bak
#恢复
docker load -i mynginx.tar
#执行后再次查看镜像,可以看到镜像已经恢复
Dockerfile
什么是Dockerfile
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
3、对于运维人员:在部署时,可以实现应用的无缝移植。
常用命令
- FROM image_name:tag
定义了使用哪个基础镜像启动构建流程 - MAINTAINER user_name
声明镜像的创建者 - ENV key value
设置环境变量 (可以写多条) - RUN command
是Dockerfile的核心部分(可以写多条) - ADD source_dir/file dest_dir/file
将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 - COPY source_dir/file dest_dir/file
和ADD相似,但是如果有压缩文件并不能解压 - WORKDIR path_dir
设置工作目录
**使用脚本创建镜像搭建Linux Centos7+jdk1.8的环境
**
使用dockerfile构建JDK8,使用基础镜像是centos7
#宿主机创建一个目录,然后把jdk传进去
mkdir –p /usr/local/dockerjdk8
下载jdk-8u171-linux-x64.tar.gz并上传到服务器(虚拟机)中的/usr/local/dockerjdk8目录
#创建文件Dockerfile
cd /usr/local/dockerjdk8
vi Dockerfile
添加Dockerfile的配置信息
#依赖镜像名称和ID,镜像如果不存在的话会去下载
FROM tutum/centos
#指定镜像创建者信息
MAINTAINER ITCAST
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
#执行命令构建镜像(注意后边的空格和点,不要省略)
docker build -t='jdk1.8' .
#查看镜像是否建立完成
docker images
#把jdk1.8镜像生成容器
docker run -di --name=mycentosjdk jdk1.8
#进入容器
docker exec -it mycentosjdk /bin/bash
进入 /usr/local/java 查看是否有jdk1.8.0_171的目录
检查Java版本,验证是否有环境变量以及是否能够查看java的版本
Docker私有仓库
需求:除了一些类似MySQL,Tomcat这些公共的镜像,很多企业在开发的时候会有项目特有的镜像环境,为了在企业内部局域网可以下载镜像,可以搭建私有的镜像仓库提供下载
#拉取私有仓库镜像
docker pull registry
#启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry
打开浏览器,输入地址:http://宿主机ip:5000/v2/_catalog
看到 `{"repositories":[]}` 表示私有仓库搭建成功并且内容为空
#Docker信任私有仓库地址,修改daemon.json
vi /etc/docker/daemon.json
#添加以下内容,保存退出。
"insecure-registries":["宿主机ip:5000"]
#重启docker服务
systemctl restart docker
镜像上传至私有仓库
在Dockerfile实验中,我们创建了jdk1.8的镜像,我们把这个镜像上传至私有仓库
#标记此镜像为私有仓库的镜像
docker tag jdk1.8 宿主机ip:5000/jdk1.8
#再次启动私服容器
docker start registry
#上传标记的镜像
docker push 宿主机ip:5000/jdk1.8
从私有仓库拉取镜像
1.删除之前jdk1.8mycentosjdk容器
2.删除jdk1.8的镜像
3.删除刚刚标记上传私有仓库的镜像:宿主机ip:5000/jdk1.8
4.从私有仓库拉取jdk1.8镜像
docker pull 宿主机ip:5000/jdk1.8
其他服务器拉取私有仓库的镜像
1.需要安装docker
2.需要信任私有仓库地址,修改daemon.json
3.拉取私有仓库镜像:docker pull 宿主机ip:5000/镜像名称