docker

##################################

docker
参考:
https://www.jianshu.com/p/09fbaa7f93a8
https://www.runoob.com/docker/docker-architecture.html
http://www.docker.org.cn/book/docker/what-is-docker-16.html
简介:
client: pip install docker
host: docker daemon
registry: docker hup
windows-->docker(linux)

安装docker
配置镜像加速
操作系统启动docker

关闭win10下docker自动启动:
任务管理器--启动--禁用 有效
docker--setting--general 无效

docker使用:
镜像操作:搜索,下载,查看,删除,获取
容器操作:运行,查看容器列表,启动,停止,删除,查看日志,进入正在运行容器,拷贝文件,获取容器元信息
创建镜像:
更新镜像:使用docker commit命令
构建镜像:使用docker build命令,需要创建Dockerfile文件


# 查看版本
docker version
# 搜索可用镜像(镜像加速)
docker search tutorial
# 下载镜像
docker pull learn/tutorial
# 容器中运行命令
docker run learn/tutorial echo "hello word"
# 容器中安装新的程序
docker run learn/tutorial apt-get install -y ping
# 获得安装完ping命令之后容器的id
docker ps -l
# 保存对容器的修改
docker commit 698 learn/ping
# 运行新的镜像
docker run learn/ping ping www.google.com
# 检查运行中的镜像
docker ps
docker inspect ID
# 发布自己的镜像
docker images
docker push learn/ping

镜像操作
查找镜像:
# 搜索docker hub网站镜像的详细信息
docker search 关键词

下载镜像:
# Tag表示版本,有些镜像的版本显示latest,为最新版本
docker pull 镜像名:TAG

查看镜像:
# 查看本地所有镜像
docker images

删除镜像:
# 删除指定本地镜像
docker rmi -f 镜像ID或者镜像名:TAG
# -f 表示强制删除

获取元信息:
# 获取镜像的元信息,详细信息
docker inspect 镜像ID或者镜像名:TAG

容器操作
运行:
docker run --name 容器名 -i -t -p 主机端口:容器端口 -d -v 主机目录:容器目录:ro 镜像TD或镜像名:TAG
# --name 指定容器名,可自定义,不指定自动命名
# -i 以交互模式运行容器
# -t 分配一个伪终端,即命令行,通常组合来使用
# -p 指定映射端口,将主机端口映射到容器内的端口
# -d 后台运行容器
# -v 指定挂载主机目录到容器目录,默认为rw读写模式,ro表示只读

容器列表:
# docker ps 查看正在运行的容器
docker ps -a -q
# -a 查看所有容器(运行中、未运行)
# -q 只查看容器的ID

启动容器:
docker start 容器ID或容器名

停止容器:
docker stop 容器ID或容器名

删除容器:
docker rm -f 容器ID或容器名
# -f 表示强制删除

查看日志:
docker logs 容器ID或容器名

进入正在运行容器:
docker exec -it 容器ID或者容器名 /bin/bash
# 进入正在运行的容器并且开启交互模式终端
# /bin/bash是固有写法,作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启动bash。
# 也可以用docker exec在运行中的容器执行命令

拷贝文件:
docker cp 主机文件路径 容器ID或容器名:容器路径 # 主机中文件拷贝到容器中
docker cp 容器ID或容器名:容器路径 主机文件路径 # 容器中文件拷贝到主机中

docker cp D:git_jstprojectyct_proxyproxy_yctsave_sqlite.py yct_proxy:/code/proxy_yct/

获取容器元信息:
docker inspect 容器ID或容器名

使用Dockerfile构建镜像
Dockerfile是一个包含创建镜像所有命令的文件,使用docker build命令可以根据Dockerfile的内容创建镜像(以tomcat为例)。

创建一个Dockerfile文件 vi Dockerfile
#注意dockerfile指令须大写
FROM tomcat
MAINTAINER zong
RUN rm -f /usr/local/tomcat/webapps/ROOT/index.jsp
RUN echo "<h1>hello world2<h1>" > /usr/local/tomcat/webapps/ROOT/index.html

构建新镜像
docker build -f Dockerfile -t zong/tomcat:v2.0 .
# -f Dockerfile路径,默认是当前目录
# -t 指定新镜像的名字以及TAG

Docker 容器使用
运行交互式的容器
docker run -i -t ubuntu:15.10 /bin/bash
-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。
启动容器(后台模式)
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
运行一个web应用
docker pull training/webapp
docker run -d -P training/webapp python app.py #-P随机映射
docker run -d -p 5050:5000 training/webapp python app.py #-p主机5050映射到容器5000
docker logs -f bf08b7f2cd89 #-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
docker top wizardly_chandrasekhar #查看容器内部运行的进程
docker inspect wizardly_chandrasekhar #检查 WEB 应用程序
docker stop wizardly_chandrasekhar
docker start wizardly_chandrasekhar
docker rm wizardly_chandrasekhar #删除容器时,容器必须是停止状态,否则会报错误
容器命名
docker run -d -P --name runoob training/webapp python app.py #使用 --name 标识来命名容器
通过-e来设定任意的环境变量
docker run -e "deep=purple" --rm ubuntu /bin/bash -c export
容器互联
同一个宿主机里的容器互联
不同宿主机里的容器互联

Docker 镜像使用
列出镜像列表 docker images
获取一个新的镜像 docker pull image:tag
查找镜像 docker search image
拖取镜像 docker pull image
创建镜像
更新镜像 docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
docker commit -m="描述消息" -a="作者" 容器ID或容器名 镜像:TAG
# 例:
# docker commit -m="add vim" -a="xjj" yct_proxy daocloud.io/xjinjin/yct_proxy:v1
构建镜像 docker build
设置镜像标签
docker tag 860c279d2fec runoob/centos:dev
docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。
使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签。

--------------------------------------------------------------------

工作流程:local--git--daocloud.io--real
本地项目(含dockerfile,docker-entrypoint.sh)跟新完-->git-->daocloud.io(制作镜像,镜像版本自动更新)-->生产环境docker pull(端口映射,容器互联)

docker:
registry:
daocloud.io
git 授权
username:xx Email:xxxxxx@163.com

1.加速器(daocloud.io):注册完账号后--加速器(自动给出加速地址)
http://xxxxx.m.daocloud.io
2.根据git项目在daocloud上制作镜像:
项目--新建项目--项目名称(镜像名)--设置代码源(git项目)--手动触发(master+commitID)--完成
镜像访问控制:
镜像仓库--点击镜像--设置--公开--ok
Dockerfile:
参考:http://guide.daocloud.io/dcs/dockerfile-9153584.html
https://www.cnblogs.com/lienhua34/p/5170335.html
FROM <image name>
MAINTAINER <author name>
RUN <command>
ADD <source> <destination>
COPY <source> <destination>
CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2
EXPOSE <port>
ENTRYPOINT ["executable", "param1","param2"]
ENTRYPOINT command param1 param2
WORKDIR /path/to/workdir
ENV <key> <value>
USER <uid>
VOLUME ["/data"]



容器互联:(通信另算,例如:proxy连接redis,则要在proxy中指定ip和port或者(可解析成ip的名字+port))
单机容器间的互联:
通过docker run命令的--link参数可以让容器之间通过连接(linking)系统进行交互。
参数格式:--link name:alias ,name是要链接的容器名称, alias是此连接的别名。

同一宿主机的网络模型分为四种模式
Bridge模式 #网桥
Host模式 #和宿主机共用Network Namespace
Containner模式 #这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace
NONE模式 # 有自己的Network Namespace,不进行任何网络配置。没有网卡、IP、路由等信息。需要自己为Docker容器添加网卡、配置IP等。

跨主机容器互连:
参考:https://blog.csdn.net/liaomin416100569/article/details/80350144
1.端口映射
2.直接路由
3.Pipework指定静态ip
--------------------------------------------------------------------

docker for windos10 配置阿里云加速镜像仓库:
参考:
https://jingyan.baidu.com/article/f3e34a12c607f4f5eb653596.html

管理控制台--容器镜像服务--镜像加速器--加速器地址:https://xp92b0he.mirror.aliyuncs.com

##################################

docker实例:
Docker 安装 Nginx
docker search nginx
docker pull nginx
docker images nginx
docker run --name runoob-nginx-test -p 8081:80 -d nginx
浏览器中打开 http://127.0.0.1:8081/
nginx 部署
mkdir -p nginx/www nginx/logs nginx/conf
# 拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录
docker cp 7a4a2dbd9efb:/etc/nginx/nginx.conf conf
docker run -d -p 8082:80 --name runoob-nginx-test-web -v D: est ginxwww:/usr/share/nginx/html -v D: est ginxconf ginx.conf:/etc/nginx/nginx.conf -v D: est ginxlogs:/var/log/nginx nginx
cd /nginx/www
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<h1>我的第一个标题</h1>
<p>我的第一个段落。</p>
</body>
</html>
浏览器中打开 http://127.0.0.1:8082/

如果要重新载入 NGINX 可以使用以下命令发送 HUP 信号到容器:
$ docker kill -s HUP container-name
重启 NGINX 容器命令:
$ docker restart container-name

原文地址:https://www.cnblogs.com/xujinjin18/p/11180914.html