何为Docker
一种操作系统虚拟化解决方案, 相比于传统的虚拟机, Docker是轻量级的, 简单的, 便捷的, 启动速度更快, 占用体积更小. 传统虚拟机的虚拟化是从硬件上实现的(连硬件都能虚拟化), 而Docker是从操作系统层面上实现, 因此Docker在Linux上使用.
Docker组件
- Docker镜像与容器
镜像: 类似于操作系统光盘, 可以将其看作是类
容器: 使用进行虚拟化出来的"操作系统", 可以看做是对象
Docker使用一个镜像可以虚拟化出多个相同的容器 - Docker客户端与服务端
Docker使用C/S架构, 主机可以运行客户端与服务端, 也能使用客户端远程连接到另一台主机的服务端, Docker服务端管理每一个Docker容器
Docker安装(使用Centos7.x或者Ubuntu安装)
安装指令
(1) yum 包更新到最新
(2) 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
(3) 设置yum源为阿里云
(4) 安装docker
(5) 安装后查看docker版本
sudo yum update
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker- ce/linux/centos/docker-ce.repo
sudo yum install docker-ce
docker -v
配置镜像服务提供商(速度很快, 用官方的太慢了)
(1) 创建配置文件
vim /etc/docker/daemon.json
(2) 编辑配置文件, 添加如下内容
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }
Docker启动与停止
启动Docker
systemctl start docker
停止Docker
systemctl stop docker
重启Docker
systemctl restart docker
查看Docker状态
systemctl status docker
设置Docker服务开机启动
systemctl enable docker
查看Docker帮助文档
docker --help
Docker常用命令
镜像相关操作
查看当前有本机上下载了哪些镜像(新装的Docker没有存在镜像)
docker images
REPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像的创建日期(不是获取该镜像的日期)
SIZE:镜像大小
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
从网络中搜索镜像
docker search 镜像名称
NAME:仓库名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
下载刚才查找到的镜像
docker pull 镜像名称
例如: docker pull consol/centos-xfce-vnc
根据镜像ID删除镜像
docker rmi 镜像id
注: rmi => remove image
删除所有镜像
docker rmi `docker images -q`
注: 这个语法有点像编写shell脚本
容器相关指令
创建及退出容器
1.创建就使用(创建容器后, 就会进入该容器, 当退出该容器, 该容器就停止运行)
docker run -it --name=容器名 镜像名:标签 /bin/bash
例如:docker run -it --name=mycentos centos:latest /bin/bash
注: 镜像名称, 标签不知道, 使用前面的docker images命令就能查看
docker run: 创建容器
-i: 运行容器
-t: 创建容器后, 就能通过后面写的/bin/bash伪终端立即进入容器
--name: 容器名称(自定义)
2.创建可以在后台运行的容器(当退出该容器, 该容器依旧在后台运行)
docker run -di --name=容器名称 镜像名称:标签
-d: 当前容器能在后台运行
3.进入后台运行的容器
docker exec -it 容器名称(或者容器ID) /bin/bash
4.退出容器(在容器中执行如下指令)
exit
查看正在运行的容器
docker ps
查看所有容器(包含正在运行, 没有运行的)
docker ps -a
停止与启动容器
docker stop 容器名(或容器ID)
docker start 容器名(或容器ID)
注: 使用docker run -it创建的普通容器使用start就能变为后台容器, 进入后台容器依旧使用docker exec -it…
文件拷贝
1.将本机文件拷贝被容器中
docker cp 需要拷贝的文件 容器名:保存在容器中的哪个位置
2.将容器中文件拷贝到主机中
docker cp 容器名称: 容器目录 需要拷贝的文件
拷贝出来的位置就放置在当前所在目录
容器与主机实现共享目录(需要在创建容器的时候就设置)
docker run -di -v 主机目录:容器目录 --name=容器名 镜像名:标签
-v: 设置主机目录与容器目录的映射关系
例如: docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
注: 设置共享目录, 需要提前设置目录的访问权限, 避免因为访问权限导致设置失败
目录共享, 二者修改都会相互影响
查看容器信息(ip等)
docker inspect 容器名(或容器ID)
删除容器
docker rm 容器名(或容器ID)
应用部署(案例实践)
1.MySQL部署
(1) 下载MySQL镜像
docker pull centos/mysql-57-centos7
(2) 创建容器, 设置端口映射关系
docker run -di --name=my_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
-p: 设置容器中端口与主机端口的映射关系
将容器中3306端口映射到主机的33306端口, 在后面的登录中就使用33306端口登录
-e: 设置容器中mysql的密码为123456
使用msyql客户端登录容器中的mysql服务
mysql -h 0.0.0.0 -u root -P 33306 -p
2.tomcat部署
(1) 下载tomcat镜像
docker pull tomcat:7-jre7
Tomcat7, jre环境7
(2)创建容器, 设置端口映射关系, 目录共享
docker run -di --name=mytomcat -p 9000:8080 -v /home:/usr/local/tomcat/webapps tomcat:7-jre7
3.Nginx部署
(1) 下载Nginx镜像
docker pull nginx
(2) 创建容器, 设置端口映射关系
docker run -di --name=mynginx -p 80:80 nginx
迁移与备份
容器保存为镜像
docker commit 容器名 镜像名
将我们当前的容器保存为镜像(镜像名自定义)
镜像备份
docker save -o 新镜像名.tar 镜像名
将原有的镜像保存为.tar文件
镜像恢复
docker load -i 镜像名.tar
将镜像的压缩包重新恢复变为镜像(最后使用docker images命令查看是否恢复成功)
使用Dockerfile构建镜像
将构建镜像过程使用的命令放入Dockerfile文件中, 使用该脚本文件创建镜像
Dockerfile中常使用的命令
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 设置工作目录
使用Dockerfile创建jdk1.8镜像(案例)
(1) 创建目录
mkdir –p /usr/local/dockerjdk8
(2) 下载jdk-8u171-linux-x64.tar.gz放入主机 /usr/local/dockerjdk8 目录中
(3) 创建Dockerfile文件
vim /usr/local/dockerjdk8/Dockerfile
#依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER author:gg
#切换工作目录
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
保存退出
(4) 执行构建镜像
docker build -t='jdk1.8' .
注: jdk1.8代表镜像名, 后面还有一个空格, 点(不要漏写, 点代表当前目录)
(5) 查看镜像是否构建成功
docker images
Docker搭建私有仓库
下载私有仓库镜像, 并启动
docker pull registry
docker run -di --name=registry -p 5000:5000 registry
打开浏览器 输入地址http://主机ip:5000/v2/_catalog看到 {“repositories”:[]} 表示私有仓库
搭建成功并且内容为空
修改/etc/docker/daemon.json配置文件, 让docker信任该域名下的私有仓库
vi /etc/docker/daemon.json
{"insecure-registries":["主机ip:5000"]}
重启Docker服务, 并启动registry镜像
systemctl restart docker
docker start registry
上传刚才创建的jdk1.8镜像到私有仓库中
docker push 主机ip:5000/jdk1.8
总结
经过此次操作, 对Docker有了一个基本的认识, 记住Docker常用命令, 多操作几遍就好了