一、简介
什么是docker
一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口; 使用go语言编写,在LCX(linux容器)基础上进行的封装,开箱即用,快速部署,可移植性强,环境隔离,简单来说分三点:
1)就是可以快速部署启动应用
2)实现虚拟化,完整资源隔离
3)一次编写,四处运行(有一定的限制,比如Docker是基于Linux 64bit的,无法在32bit的 linux/Windows/unix环境下使用)
为啥使用
- 提供一次性的环境,假如需要安装Mysql,则需要安装很多依赖库、版本等,如果使用Docker则通过镜像就可以直接启动运行
- 快速动态扩容,使用docker部署了一个应用,可以制作成镜像,然后通过Dokcer快速启动
- 组建微服务架构,可以在一个机器上模拟出多个微服务,启动多个应用
- 更好的资源隔离和共享
二、安装
- 安装环境:Centos 7
- 安装条件:docker官方要求至少3.8以上,建议3.10以上
- Docker 版本:
- docker EE 企业版本
- docker CE 社区版本
- 关闭防火墙:systemctl stop firewalld.service
- 下载阿里云 Docker Ce 社区版 yum源
cd /etc/yum.repos.d/
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.rep
- 查看docker安装包:yum list | grep docker
- 安装Docker Ce 社区版本:yum install -y docker-ce.x86_64
- 设置开机启动:systemctl enable docker
- 更新xfsprogs:yum -y update xfsprogs
配置阿里云镜像加速地址 :
vi /etc/docker/daemon.json
#文件内设置镜像地址
{
"registry-mirrors": ["https://5xok66d4.mirror.aliyuncs.com"]
}
三、命令
docker命令:
- 启动docker:systemctl start docker
- 关闭docker:systemctl stop docker
- 重启docker:systemctl restart docker
- 重新加载并重启docker:systemctl daemon-reload && systemctl restart docker
- 查看版本:docker version
- 查看详细信息:docker info
镜像命令:
- 查看本地镜像:docker images
- 搜索镜像:docker search xxx
- 搜索镜像并过滤是官方的: 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
容器命令:
- 构建容器: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 CONTAINER_ID /bin/bash
- 查看运行中容器日志信息:docker logs -f CONTAINER_ID
挂载命令:
- 从宿主机复制到容器: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 commit 制作镜像:
- docker commit 4eb9d14ebb18(修改过内容的容器id) mycentos:7
- docker commit -a "XD" -m "mkdir /home/xdclass" 4eb9d14ebb18 mcentos:7
- -a:标注作者
- -m:说明注释
dockerfile 制作镜像:
命令:
- docker build -t mycentos:v2 .
- 在docker file 路径下构建镜像命令
- 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"]
样例:
tomcat 镜像
FROM centos:7
ADD jdk-8u211-linux-x64.tar.gz /usr/local
RUN mv /usr/local/jdk1.8.0_211 /usr/local/jdk
ENV JAVA_HOME=/usr/local/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
ADD apache-tomcat-8.5.35.tar.gz /usr/local
RUN mv /usr/local/apache-tomcat-8.5.35 /usr/local/tomcat
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
nginx 镜像
#shell 脚本
#!/bin/bash
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel
cd /usr/local/nginx-1.16.0
./configure --prefix=/usr/local/nginx && make && make install
#docker file
FROM centos:7
ADD nginx-1.16.0.tar.gz /usr/local
COPY nginx_install.sh /usr/local
RUN sh /usr/local/nginx_install.sh
EXPOSE 80
前台方式永久运行: docker run -itd -p 80:80 mycentos:nginx /usr/local/nginx/sbin/nginx -g "daemon off;"
redis 镜像
#shell 脚本
#!/bin/bash
yum install -y gcc gcc-c++ make openssl openssl-devel
cd /home/redis-4.0.9
make && make PREFIX=/usr/local/redis install
mkdir -p /usr/local/redis/conf/
cp /home/redis-4.0.9/redis.conf /usr/local/redis/conf/
sed -i '69s/127.0.0.1/0.0.0.0/' /usr/local/redis/conf/redis.conf
sed -i '88s/protected-mode yes/protected-mode no/' /usr/local/redis/conf/redis.conf
#docker file
FROM centos:7
ADD redis-4.0.9.tar.gz /home
COPY redis_install.sh /home
RUN sh /home/redis_install.sh
ENTRYPOINT /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
五、docker 网络模式
- bridge:桥接模式
- 容器有专属网卡连接docker网卡,docker 在连接服务器网卡
- host:主机模式
- 容器直接使用服务器网卡
- none:无网络模式
注释:个人学习观点以作笔记,如有瑕疵望谅解