Docker

一、简介

什么是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:无网络模式

注释:个人学习观点以作笔记,如有瑕疵望谅解 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值