一、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 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 [email protected] : /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 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
这个地方只能使用 域名 不能使用 ip 地址,按此步骤,只能使用域名 push
查看仓库信息:镜像以及对应的版本
- curl https: //mint.com:5000/v2/_catalog
- curl https: //mint.com:5000/v2/mint_busybox/tags/list
拉取仓库镜像
- docker pull mint.com: 5000 / mint_busybox
四、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 [email protected]
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 [email protected]
- # 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 run --itd --name centos_nginx - P centos_nginx bash
来源: http://www.bubuko.com/infodetail-2216630.html