Hz零基础学习Docker

Deadly 提交于 2020-03-12 11:27:54

1、docker

1.docker

一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口; 

使用go语言编写,在LCX(linux容器)基础上进行的封装 
简单来说分三点:        
  1)就是可以快速部署启动应用        
  2)实现虚拟化,完整资源隔离        
  3)一次编写,四处运行(有一定的限制,比如Docker是基于Linux 64bit的,无法在32bit的 
   linux/Windows/unix环境下使用)


为什么用:

1、提供一次性的环境,假如需要安装Mysql,则需要安装很多依赖库、版本等,如果使用Docker则通过镜像就 可以直接启动运行   
2、快速动态扩容,使用docker部署了一个应用,可以制作成镜像,然后通过Dokcer快速启动
3、组建微服务架构,可以在一个机器上模拟出多个微服务,启动多个应用
4、更好的资源隔离和共享

总结一句话:开箱即用,快速部署,可移植性强,环境隔离

2、Centos7安装docker

1.安装条件

docker EE 企业版本 
docker CE 社区版本 

docker官方要求至少3.8以上,建议3.10以上 

uname -a    --查看内核信息

Linux localhost.localdomain 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux



2.安装wget

yum install -y wget


3.获取在线的docker版本

yum list | grep docker


这里安装社区版本,需要下载阿里的源

cd /etc/yum.repos.d/


yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


https://www.cnblogs.com/hellxz/p/11044012.html   --教程


4.安装社区版

yum list | grep docker

yum install -y docker-ce docker-ce-cli containerd.io   --安装最新版

5.设置开机启动

systemctl enable docker 

6.更新xfsprogs

yum -y update xfsprogs 

7.启动docker

systemctl start docker 

8.查看版本

docker version

8.查看详细信息

docker info 





----卸载命令

yum remove docker \
           docker-client \
           docker-client-latest \
           docker-common \
           docker-latest \
           docker-latest-logrotate \
           docker-logrotate \
           docker-engine


rm /var/lib/docker/ -rf

3、镜像

1.镜像

模板,镜像可以用来创建Docker容器,一个镜像可以创建多个容器。


docker images --查看镜像


docker search  名称   ---搜索指定的镜像  docker search tomcat


docker search --filter "is-official=true" 名称  ---搜索指定官方镜像


docker search --filter stars=数量 名称  --搜索大于stars数量的镜像


docker pull 名称:版本    --下载镜像  docker pull centos:7


docker tag 名称:版本 新名称:版本  --修改镜像名称 docker tag centos:7  mycentos:7


docker rmi 名称:版本    ---删除镜像   docker rmi centos:7

4、阿里云镜像加速

登录阿里云--->控制台--->搜索容器镜像服务---->镜像加速

1.vi /etc/docker/daemon.json

2.复制阿里云代码


3.重启

systemctl daemon-reload 
systemctl restart docker


5、容器

1.容器

容器是使用镜像创建的运行实例
一个镜像可以启动无数台容器(机器性能允许的情况下) 
容器与容器之间的操作互不影响,处于隔离的环境,保证的平台的安全性。 


docker run -itd --name=mycentos centos:7   --构建容器 自定义名称


-i :表示以交互模式运行容器(让容器的标准输入保持打开) 
-d:表示后台运行容器,并返回容器ID 
-t:为容器重新分配一个伪输入终端

查看本地所有的容器: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

6、文件复制与挂载

1.宿主机复制文件到容器

docker cp  宿主机文件路径  [容器Name|容器ID]:/目录   ---- docker cp /opt/123.txt mycentos:/opt

2.容器复制文件到宿主机

docker cp [容器Name|容器ID]:/文件  宿主机文件路径  --- docker cp mycentos:/opt/456.txt /opt

3.挂载

docker run -itd -v 宿主机目录:容器目录 镜像ID   ------ docker run -itd -v /opt/test/:/opt --name=mycentos2 centos:7



注意:挂载可以实现宿主机与容器之间数据共享,容器stop也可共享。

7、Commit构建自定义镜像

1.创建一个容器,比如在容器中安装了JDK等软件


docker commit -a "ldd" -m "自定义镜像" ee9314cc7161  mycentos:v1


-a:标注作者 
-m:说明注释 

ee9314cc7161  ---容器ID

mycentos:v1   ---自定义镜像的名称和版本

8、dockerFile构建自定义镜像

1.创建dockerfile文件

touch dockerfile



2.编辑dockerfile


# this is a dockerfile 
FROM centos:7     ----镜像来源(基于哪个镜像制作)
MAINTAINER ldd    ----备注
RUN echo "正在构建镜像!!!"   ----执行命令
WORKDIR /home/ldd    ----工作目录,构建容器后默认进入的工作目录,如果不存在会自动创建
COPY 123.txt /home/ldd   ----复制文件到容器(通过自定义镜像构建的容器)指定目录
RUN yum install -y net-tool    ----执行命令


3.docker build -t mycentos:v2 .    ---在当前dockerfile同级目录中执行


4.docker images ----查看镜像是否构建成功










常用的Dockerfile指令 
FROM 基于哪个镜像 
MAINTAINER 注明作者 
COPY 复制文件进入镜像(只能用相对路径,不能用绝对路径) 
ADD 复制文件进入镜像(假如文件是.tar.gz文件会解压) 
WORKDIR: 指定工作目录,假如路径不存在会创建路径 
ENV 设置环境变量 
EXPOSE 暴露容器端口 
RUN  在构建镜像的时候执行,作用于镜像层面 
ENTRYPOINT 在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条 
CMD 在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条 容器启动后执行默认的命令或者参数,允许被修改 

注意:ENTRYPOINT优先级高于CMD 

命令格式: 
shell命令格式:RUN yum install -y net-tools 
exec命令格式:RUN [ "yum","install" ,"-y" ,"net-tools"]

8、dockerFile实战

1.下载jdk tomcat压缩


2.dockerfile

vim dockefile


# this my  create  docker images ldd
FROM centos:7
COPY jdk-8u211-linux-x64.tar.gz /opt
RUN tar -xvf /opt/jdk-8u211-linux-x64.tar.gz -C /usr/local/
RUN mv /usr/local/jdk1.8.0_211 /usr/local/jdk
ENV JAVA_HOME=/usr/local/jdk
ENV CLASSPATH=.:$JAVA_HOME/lib
ENV PATH=$PATH:$JAVA_HOME/bin:$CLASSPATH
COPY apache-tomcat-8.5.35.tar.gz /opt
RUN tar -xvf /opt/apache-tomcat-8.5.35.tar.gz -C /usr/local/
RUN mv /usr/local/apache-tomcat-8.5.35 /usr/local/tomcat
EXPOSE 8080


3.构建自定义镜像

docker build -t mycentos:v1


4.构建容器

docker run -itd -p 8080:8080 -v /opt/test/:/usr/local/tomcat/webapps/ROOT --name=myRong mycentos:v1      

--- -p 8080(宿主机端口号):8080(容器端口号)  映射端口好
--- -v 是挂载

5.进入容器,并启动tomcat

docker exec -it myRong /bin/bash



9、Dockerfile构建nginx镜像 

1.上传nginx压缩包


2.dockerfile

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


3.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 instal


4.构建镜像

docker build -t mycentos:nginx .

5.构建容器

-- docker run -itd -p 80:80 mycentos:nginx /usr/local/nginx/sbin/nginx -g "daemon off;"

docker run -itd -p 80:80  --name=myNginx mycentos:nginx   --进入容器启动nginx

10、Dockerfile构建Redis镜像

1.上传Redis压缩包


2.dockerfile

FROM centos:7
ADD redis-4.0.9.tar.gz /usr/local/
COPY redis_install.sh /usr/local/
RUN sh /usr/local/redis_install.sh
EXPOSE 6379


3.redis_install.sh 脚本

yum install -y gcc gcc-c++ make openssl openssl-devel
cd /usr/local/redis-4.0.9
make && make PREFIX=/usr/local/redis install
cp /usr/local/redis-4.0.9/redis.conf /usr/local/redis/bin/

4.构建镜像

docker build -t mycentos:redis .

5.构建容器
docker run -itd -p 6378:6379 --name=myRedis mycentos:redis

6.进入容器

docker exec -it 容器id  /bin/bash

7.配置容器中redis.conf文件


daemonize yes       ---改成yes    后台模式运行

protected-mode no   ---改成no     保护模式

#  bind 127.0.0.1   ---注释掉     只监听本机




 

 

 

xx、docker容器网络模式

1.查看docker容器网络模型


默认的三种网络模式: 
bridge:桥接模式    --默认 只能通过映射端口去访问容器中的应用
host:主机模式 
none:无网络模式 

查看网络模式: docker network ls

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!