docker
安装见: https://www.cnblogs.com/yufeng218/p/8370670.html 介绍:https://www.cnblogs.com/s-b-b/p/8533932.html
配置
镜像加速
- /etc/docker/daemon.json(Linux)
- %programdata%\docker\config\daemon.json(Windows)
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
常用
- 镜像操作
- 查看当前本地镜像列表: docker images
- 查看远程相关镜像镜像: docker search 镜像名称
- 拉取镜像到本地: docker pull xxx
- 删除镜像: docker rmi 镜像名字
- 当存在多个名字一样的镜像时候,可以通过指定tag方式来操作,如ubuntu:16.04
- 容器操作
- 创建一个docker容器,返回容器的id: docker create 镜像名字
- 运行docker容器:docker start
- 新建容器且运行,也就是上面两步一块执行: docker run 镜像名字
- 如果镜像不在,从源拉去
- p:指定映射端口,如运行一个nginx服务,那么我可以设置 -p 8080:80来把本地的8080端口映射到容器里的80端口。
- d:容器作为一个守护进程去进行运行,也就是保持后台运行,运行后会返回cotainer id。
- 停止容器: docker stop 容器id
- 查看进程: docker ps
- docker ps -a
- 查看容器配置
- docker inspect id/name
- 删除容器: docker rm 容器id
- 容器与镜像间的操作
- 终端连接到容器: docker exec -i -t 容器id bash
- 复制文件到容器里面: docker cp index.html 镜像id://usr/share/nginx/html
- 保存更改并生成为一个新的image文件: docker commit -m "mess" 镜像id 镜像名字
- 查看容器内的标准输出: docker logs
CONTAINER ID
/ docker logsNAMES
- docker logs -f id/name 类似tail -f
- 停止容器: docker stop
CONTAINER ID
/ docker stopNAMES
- 查看命令帮助: docker command --help 如:docker status --help
- docker pull training/webapp # 载入镜像
- docker run -d -P training/webapp python app.py
- -d:让容器在后台运行。
- -P:将容器内部使用的网络端口映射到我们使用的主机上。-p 8080:80来把本地的8080端口映射到容器里的80端口。
- docker run -d -p 5000:5000 training/webapp python app.py -p 设置端口映射
- docker stop id/name
- docker start id/name 重启
- docker rm id/name 删除容器
- 删除容器时,容器必须是停止状态.
- 查看端口映射: docker port id/name
- 查看容器进程: docker top id/name
- 查看容器底层信息: docker inspect id/name
使用
Docker Hello World
- docker run ubuntu:15.10 /bin/echo "Hello world"
- run:与前面的 docker 组合来运行一个容器。
- ubuntu:15.10指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
- /bin/echo "Hello world": 在启动的容器里执行的命令
运行交互式的容器
- 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"
容器
- docker pull training/webapp # 载入镜像
- docker run -d -P training/webapp python app.py
- -d:让容器在后台运行。
- -P:将容器内部使用的网络端口映射到我们使用的主机上。
- docker run -d -p 5000:5000 training/webapp python app.py -p 设置端口映射
镜像
查看镜像: docker image
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
获取镜像: docker pull ubuntu:13.10
查找镜像: docker search httpd
创建镜像:
设置镜像标签: docker tag 860c279d2fec runoob/centos:dev
Docker网络
单机网络
- Bridge Network
- Host Network
- None Network
多机网络
- Overlay Network
- 安装插件: etcd
docker network ls 查看网络
docker network create -h 查看帮助
docker network create -d bridge my-bridge 创建网络类型
docker run -d --name test3 --network my-bridge hello-world-loop
docker network connect -h
docker run -d --name test2 --link test hello-world-loop
测试
docker run -d -p 5000:5000 --name test training/webapp python app.py
docker run -d -p 5001:5001 --name test2 --link test training/webapp python app.py
docker network create -d bridge my-bridge 创建网络
docker run -d -p 5003:5003 --network my-bridge --name test3 --link test training/webapp python app.py 指定网络
docker network connect my-bridge test 指定网络连接容器
Docker的镜像和容器
docker 依赖的底层技术
- namespaces:访问隔离(pid,network,mnt)
- cgroup:资源控制
- ufs:文件系统隔离
docker -o test.tar test 导出image
docker load -i test.tar 导入image
docker exec -it name bash 进入容器中
docker export containerid -o container.tar 导出容器
docker import container.tar xxxx/aaa 导入
资源监控
- docker stats id
- docker inspect
管理界面
DockerUI: http://192.168.56.101:9000 Portainer: http://192.168.56.101:9001 admin/a**
DockerUI
安装
- 拉取镜像: docker pull uifd/ui-for-docker
- 启动容器: docker run -it -d --name docker-web -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock docker.io/uifd/ui-for-docker
- 界面: ip:9000
总结
因为没有登录体系,所以很难在公司里流通。因为这样,每个人都可以去控制,即使通过TLS来控制权限,但无法将容器管理权限分配给某个用户,所以最终放弃该平台。
优点:
支持容器管理 支持镜像管理 基于docker api,自身也是一个容器。 稳定性高 可动态显示显示容器之间关系图 容器管理,增加端口映射,增加系统变量、映射目录等
缺点:
没有登录验证,因为没有登录体系,目前解决办法是,只开放本地访问,或者通过TLS来对权限进行控制。 无法分配某容器给某用户。 不支持多主机。 不支持集群swarm等 功能少 不支持控制台命令
Shipyard
打不开的,作者已经弃坑此项目: https://blog.hans362.cn/archives/266/
Portainer
安装
拉取portainer镜像:
- docker pull docker.io/portainer/portainer
镜像名打了tag:docker tag docker.io/portainer/portainer portainer
运行,映射端口到9001:
docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name portainer portainer/portainer
打开浏览器: ip:9001
注: 如果出现创建用户/密码后,登录异常,查看服务器时间是否太过早(如果太早,则修改,则可以登录)
总结
优点 支持容器管理、镜像管理 轻量级,消耗资源少 基于docker api,安全性高,可指定docker api端口,支持TLS证书认证。 支持权限分配 支持集群
缺点 功能不够强大。 容器创建后,无法通过后台增加端口。