一 介绍
- 什么是Dokcer?
1)就是可以快速部署启动应用
2)实现虚拟化,完整资源隔离
3)一次编写,四处运行(有一定的限制,比如Docker是基于Linux 64bit的,无法在32bit的 linux/Windows/unix环境下使用) - 为什么要用?
1、提供一次性的环境,假如需要安装Mysql,则需要安装很多依赖库、版本等,如果使用Docker则通过镜像就 可以直接启动运行
2、快速动态扩容,使用docker部署了一个应用,可以制作成镜像,然后通过Dokcer快速启动
3、组建微服务架构,可以在一个机器上模拟出多个微服务,启动多个应用 4、更好的资源隔离和共享 - 总结一句话:开箱即用,快速部署,可移植性强,环境隔离
二 安装
安装环境:Centos 7 安装条件:docker官方要求至少3.8以上,建议3.10以上
Docker 版本: docker EE 企业版本 docker CE 社区版本
关闭防火墙:systemctl stop firewalld.service vi /etc/selinux/config
安装Docker Ce 社区版本:
安装wget命令:
下载阿里云docker社区版 yum源
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]#
[root@localhost yum.repos.d]# wget http://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo
查看docker安装包:yum list | grep docker
安装Docker Ce 社区版本:yum install -y docker-ce.x86_64
设置开机启动:systemctl enable docker
更新xfsprogs:yum -y update xfsprogs
启动docker:systemctl start docker
查看版本:docker version
查看详细信息:docker info
三 什么是镜像?
查看本地镜像:docker images
搜索镜像:docker search centos
搜索镜像并过滤是官方的: docker search --filter "is-official=true" centos
搜索镜像并过滤大于多少颗星星的:docker search --filter stars=10 centos
下载centos7镜像:docker pull centos:7
修改本地镜像名字(小写):docker tag centos:7 mycentos:1
本地镜像的删除:docker rmi centos:7
四 配置阿里云镜像加速
阿里云镜像加速器配置地址:https://cr.console.aliyun.com/cn-shenzhen/instances/mirrors
配置步骤:vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://5xok66d4.mirror.aliyuncs.com"]
}
重启:systemctl daemon-reload && systemctl restart docker
五 讲解镜像与容器之间的关系
一个镜像可以启动无数台容器(机器性能允许的情况下) 容器也容器之间的操作互不影响,处于隔离的环境
构建容器:docker run -itd --name=mycentos centos:7
-i :表示以交互模式运行容器(让容器的标准输入保持打开)
-d:表示后台运行容器,并返回容器ID
-t:为容器重新分配一个伪输入终端
--name:为容器指定名称
查看本地所有的容器:docker ps -a
查看本地正在运行的容器:docker ps
停止容器:docker stop CONTAINER_ID / CONTAINER_NAME
一次性停止所有容器:docker stop $(docker ps -a -q)
启动容器:docker start CONTAINER_ID / CONTAINER_NAME
重启容器:docker restart CONTAINER_ID / CONTAINER_NAME
删除容器:docker rm CONTAINER_ID / CONTAINER_NAME
强制删除容器:docker rmi -f CONTAINER_ID / CONTAINER_NAME
查看容器详细信息:docker inspect CONTAINER_ID / CONTAINER_NAME
进入容器:docker exec -it 0ad5d7b2c3a4 /bin/bash
六 容器与宿主机之间文件复制与挂载
从宿主机复制到容器:docker cp
宿主机本地路径 容器名字/ID:容器路径 docker cp /root/123.txt mycentos:/home/
从容器复制到宿主机:docker cp 容器名字/ID:容器路径 宿主机本地路径 docker cp mycentos:/home/456.txt /root
宿主机文件夹挂载到容器里:docker run -itd -v 宿主机路径:容器路径 镜像ID docker run -itd -v /root/xdclass/:/home centos:7
七 构建自定义镜像
docker目前镜像的制作有俩种方法:
- 基于Docker Commit制作镜像
- 基于dockerfile制作镜像,Dockerfile方式为主流的制作镜像方式
八 Commit构建自定义镜像
启动并进入容器:docker run -it centos:7 /bin/bash
在/home 路径下创建xdclass文件夹:mkdir /home/xdclass
安装ifconfig命令:yum -y install net-tools
重启容器,查看容器的xdclass文件夹还在不在:docker restart 67862569d4f7
删除容器,再重新启动一个容器进入查看有没有xdclass文件夹:docker rm 67862569d4f7 && docker run -it centos:7 /bin/bash
构建镜像:
- docker commit 4eb9d14ebb18 mycentos:7
- docker commit -a "XD" -m "mkdir /home/xdclass" 4eb9d14ebb18 mcentos:7
- -a:标注作者
- -m:说明注释
- 查看详细信息:docker inspect 180176be1b4c
启动容器:docker run -itd 180176be1b4c /bin/bash
进入容器查看:docker exec -it 2a4d38eca64f /bin/bash
九 Dockerfile构建镜像实战
Dockerfile
# this is a dockerfile
FROM centos:7
MAINTAINER XD 123456@qq.com
RUN echo "正在构建镜像!!!"
WORKDIR /home/xdclass
COPY 123.txt /home/xdclass
RUN yum install -y net-tools
构建:docker build -t mycentos:v2 .
查看:docker images
进入验证:验证成功
十 些常用的Dockerfile指令
FROM
基于哪个镜像
MAINTAINER
注明作者
COPY
复制文件进入镜像(只能用相对路径,不能用绝对路径)
ADD
复制文件进入镜像(假如文件是.tar.gz文件会解压)
WORKDIR:
指定工作目录,假如路径不存在会创建路径
ENV
设置环境变量
EXPOSE
暴露容器端口
RUN
在构建镜像的时候执行,作用于镜像层面
ENTRYPOINT
在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条
CMD
在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条
容器启动后执行默认的命令或者参数,允许被修改
命令格式:
shell命令格式:RUN yum install -y net-tools exec命令格式:RUN [ "yum","install" ,"-y" ,"net-tools"]
#第一个
FROM centos:7
RUN echo "images building!"
CMD ["echo","container","starting..."]
ENTRYPOINT ["echo","container","starting !!!"]
#第二个
FROM centos:7
RUN echo "images building!"
CMD ["echo","containe1r","starting..."]
CMD ["echo","container2","starting..."]
ENTRYPOINT ["echo","container2","starting !!!"]
ENTRYPOINT ["echo","container2","starting !!!"]
#第三个
FROM centos:7
CMD ["-ef"]
ENTRYPOINT ["ps"]