一、docker简介

1、Docker优势

(1)、启动速度快,秒级实现

(2)、资源利用率高,一台机器可以跑上千个docker容器

(3)、更快的交付和部署,一次创建也配置后,可以再任意地方运行

(4)、内核级别的虚拟化,不需要额外的hypervisor支持。会有更高的性能和效率

(5)、易迁移,平台依赖性不强


2、核心概念

镜像 是一个只读的模板,类似于安装系统用的ISO文件,通过镜像来完成各种应用的部署

容器 镜像类似于操作系统,而容器类似于虚拟机本身,可以启动、开始、停止、删除等操作,每个容器都是相互隔离的

仓库 存放镜像的,分为公开仓库 和 私有仓库。


3、常用操作

docker run -t -i centos /bin/bash

-i:标准输入打开

-t: 分配一个为终端.

-d:在后台运行

docker ps -a

docker rmi centos  //镜像名字 可以加 tag

docker tag centos centos:123456

docker ps

docker start 启动上一步操作的 容器。。。启动时支持简写

docker exec -it e4 /bin/bash      exec连接容器

docke commit -m "install http" -a "Mint"  ID mintt/centos     最后是新镜像名字 -m “内容” -a "author" ID 可以简写

下载镜像,导入镜像

wget https://download.openvz.org/template/precreated/centos-7-x86_64.tar.gz

cat centos-7-x86_64.tar.gz |docker import - opencv-mint-7-x86_64     最后镜像名字

把现有的镜像导出为一个文件

docker save -o ubuntu.tar d355ed3537e9

使用文件恢复本地镜像

docker load < ubuntu.tar  或者 docker load --input ubuntu.tar  导入 没有名字以及tag

docker push liqilong/mint


二、docker 容器管理

docker create -it  opencv-mint-7-x86_64

docker start  ID  启动

docker run -itd  opencv-mint-7-x86_64 /bin/bash    直接在后台运行

docker exec -it ID   //上步返回的ID      或者 docker attach ID    可以进入

使用attach进入退出终端,容器停止

docker run -d centos:latest bash -c "while :; do echo 123; sleep 1 ; done "

bf649246bc0ea95a6fc3ef7a8c213310bd0ced4d9396441586d778261bd4297f

docker logs bf6

docker部署nginx有什么弊端 docker和nginx部署优缺点_nginx



docker stop bf6 docker run -itd --name Mint_linux centos:latest bash  //指定名字




docker rm ID  删除容器    docker rm -f ID //强制删除

docker run --rm -it centos bash -c "sleep 30"  //--rm 可以让容器退出后直接删除,在这里命令执行完容器就会退出,不能和-d一起适用

docker export ID >file.tar    //导出容器,迁移以后需要导入

cat file.tar |docker import - mint_centos        生成mint_centos镜像


三、Docker仓库管理

国内registry镜像地址 :https://registry.docker-cn.com



docker 删除所有容器  docker rm $(docker ps -a -q)



删除所有未运行 Docker 容器



docker rm $ (docker ps -a -q)



删除所有未打 tag 的镜像



docker rmi $(docker images -q | awk '/^<none>/ { print $3 }')



删除所有镜像

docker rmi $(docker images -q)

根据格式删除所有镜像

docker rm $(docker ps -qf status=exited)


registry私库IP:192.168.1.87

client IP: 192.168.1.88




docker pull registry   //registry    docker官方提供的一个镜像,使用它来创建本地的docker私有仓库
docker run -d -p 5000:5000 registy   //以registry镜像启动容器,监听5000端口
docker exec -it ID /bin/sh
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/mint.com.key -x509 -days 365 -out certs/mint.com.crt
scp -r mint.com.crt root@192.168.1.88:/etc/pki/ca-trust/source/anchors/mint.com.crt
update-ca-trust


docker run -d -p 5000:5000 --restart=always --name registry -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/mint.com.crt -e REGISTRY_HTTP_TLS_KEY=/certs/mint.com.key registry:2



--restart 标志会检查容器的退出代码,并据此来决定是否要重启容器,默认是不会重启。 --restart的参数说明 always:无论容器的退出代码是什么,Docker都会自动重启该容器。 on-failure:只有当容器的退出代码为非0值的时候才会自动重启。另外,该参数还接受一个可选的重启次数参数,`--restart=on-fialure:5`表示当容器退出代码为非0值时重启5次



netstat -lnp|grep 5000 //发现监听5000端口 curl https://mint.com:5000/v2/_catalog --insecure  //到client执行命令



docker部署nginx有什么弊端 docker和nginx部署优缺点_centos_02



docker push 192.168.1.87:5000/mint_ubuntu



error:

Get https://192.168.1.87:5000/v2/: x509: cannot validate certificate for 192.168.1.87 because it doesn't contain any IP SANs

docker部署nginx有什么弊端 docker和nginx部署优缺点_centos_03

这个地方只能使用 域名 不能使用ip地址,按此步骤,只能使用域名push


查看仓库信息:镜像以及对应的版本



curl https://mint.com:5000/v2/_catalog



docker部署nginx有什么弊端 docker和nginx部署优缺点_centos_04



  curl https://mint.com:5000/v2/mint_busybox/tags/list



docker部署nginx有什么弊端 docker和nginx部署优缺点_docker部署nginx有什么弊端_05

拉取仓库镜像



docker pull mint.com:5000/mint_busybox



docker部署nginx有什么弊端 docker和nginx部署优缺点_nginx_06


四、docker 数据管理



docker run -itd -v /root/data/:/data1 centos /bin/sh /bin/bash   //data本地文件,data1是docker的
docker run -itd --volumes-from. mint_dokcer mint/centos /bin/sh  //使用mintc/entos并且使用MInt_docker的镜像




共享容器的目录


1、创建数据容器    、、 -v /root/data/:/data1    直接可以在本地
docker run -itd -v /data/ --name mint_testvol   centos bash     注意这里的/data/是容器的 /data/目录,而不是本地的/data/目录
2、其他容器连接
docker run -itd --volumes-from mint_testvol centos bash
docker run -itd --volumes-from mint_testvol --name= web1  centos bash //数据也是来自mint_testvol



数据卷容器备份恢复

备份:


mkdir vol_data_backup                          //存放位置
docker run -itd --volumes-from mint_testvol -v /root/data/vol_data_backup/:/backup centos bash //挂载目录   以及在容器里 打包  tar /backup/data.tar   /data/  执行以后会在 宿主机的/root/data/vol_data_backup目录下 查看到tar包



恢复:

思路:先建一个数据卷容器,再建一个新的容器并挂载该数据容器,然后再把tar包解压



docker run -itd -v /data/ --name testvol2 centos bash
docker run --volumes-from testvol2 -v /root/data/vol_data_backup/:/backup centos tar xvf /backup/data.tar



五、docker 网络模式

1、host模式  使用docker run时使用--net=host  使用宿主机网络

2、container模式  --net=conrainer:ID或者 name  多个容器使用共同的网络,看到的IP一样

3、none模式  使用  --net=none    不会配置任何网络

4、bridge 模式  默认模式    这种模式会为每一个容器分配一个独立的Network Namespace 类似于vmware的nat网络模式,同一个宿主机上的所有容器会在同一个网段下,相互之间可以通信。

外部访问容器

docke commit -m "install http" -a "Mint"  ID mint/centos     最后是新镜像名字 -m “内容” -a "author"

docker run -itd -p 5123:80 centos_with_httpd bash    、、创建新的容器

docker exec -it e14c148 bash     、、进入容器启动httpd服务

可以通过访问宿主机的5123端口访问 容器的 80 端口

docker 容器互联

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

Connect to MySQL from an application in another Docker container

docker run --name some-app --link some-mysql:mysql -d application-that-uses-mysql

Connect to MySQL from the MySQL command line client

docker run -it --link some-mysql:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'



六、dockerfile

1 FROM //指定基于那个镜像

2、MAINTAINER  //指定作者信息   mint mint@mint.com

3、RUN  //镜像操作指令

格式为 RUN <command> 或者 RUN ["executable","param1","param2"]

RUN yum install httpd     RUN ["/bin/bash","-c","echo hello"]

4、CMD //三种格式  只有最后一个生效

5、EXPOSE  指定要映射出去的端口 启动容器时 -P 自动分配  -p指定端口

6、ENV    ENV <key> <value>

  ENV MYSQL_VERSION 5.6

7、ADD 格式 ADD <src> <dest> 将本地的一个文件或目录到容器的某个目录里。其中src为Dockerfile所在目录的相对路径 ,也可以是一个url。

ADD <conf/vhost> </usr/local/nginx/conf>

8、CPOY  跟ADD 一样不支持url

9、ENTRYPOINT 容器启动时要执行的命令,只有一条生效,多写只有最后一个生效,

CMD 会被docker run指令覆盖(docker run 时最后的bash 会覆盖dockerfile的CMD),而ENTRYPOINT 不能被覆盖,并且比CMD或者docker run 指定的命令靠前执行

10、VOLUME 格式 VOLUME ["/data"]

创建一个可以从本地主机或其它容器挂载的挂载点

11 USER  格式 USER daemon

指定容器运行的用户

12、WORKDIR 格式 WORKDIR /path/to/workdir

为后续的RUN、CMD、ENTRYPOINT 指定工作目录

The <dest> is an absolute path, or a path relative to WORKDIR, into which the source will be copied inside the destination container.

dockfile创建镜像----nginx



cat dockerfile 

#Based on Centos
#Date :2017 07 18
#Auth :mint

FROM centos
MAINTAINER mint liqilong2010@hotmail.com

# install necessary tools

RUN yum install -y pcre-devel wget net-tools gcc zlib zlib-devel make openssl-devel
#install Nginx
#ADD http://nginx.org/download/nginx-1.12.1.tar.gz .
#第一次使用ADD报错 路径有问题,问题解决了,ADD 拉取的是解压好的包,直接进入编译就行不需要解压

RUN wget  http://nginx.org/download/nginx-1.12.1.tar.gz
RUN tar zxvf nginx-1.12.1.tar.gz
RUN mkdir -p /usr/local/nginx
RUN cd nginx-1.12.1 && ./configure --prefix=/usr/local/nginx && make && make install
#RUN rm -rf /usr/local/nginx/conf/nginx.conf
#COPY .nginx_conf /usr/local/nginx/conf/nginx.conf

EXPOSE 80

#CMD /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#执行以后容器停止

docker build -t centos_nginx .      //-t 生成镜像的名字   . dockerfile 文件位置



docker部署nginx有什么弊端 docker和nginx部署优缺点_docker_07




docker run --itd --name centos_nginx -P centos_nginx bash



转载于:https://blog.51cto.com/liqilong2010/1948837