docker info
: 显示docker基本信息, 可以用来检查安装是否正确.docker pull [options] [<域名/ip>[:端口号]]<imageName>[:tag]
: 拉取镜像到本地. tag是版本.默认最新版docker images [options] [repository[:tag]]
: 查看本地镜像docker ps
: 查看容器状态docker rm <contaienrId>
: 删除特定containerdocker rm $(docker ps -a -q -f status=exited)
: 删除所有已经退出了的containerdocker rmi <imageName>
: 删除指定镜像docker run -d -P --name static-site prakhar1989/static-site
: -d
表示detach终端, -P
将容器监听的所有端口映射到主机的随机端口. --name
给容器设置名字docker port <containerName>
: 显示容器端口到主机端口对应关系docker run -p <hostPort>:<containerPort> prakhar1989/static-site
: 启动容器, 将containerPort映射到主机hostPortdocker stop <containerId>
: 结束一个detach状态的容器docker build -f Dockerfile -t <username>/<imageName> .
: 根据指定目录的Dockerfile创建镜像, -t
指定tag, username
是hub.docker.com用户名. imageName
是镜像名..
指定build的上下文. -f
指定配置文件docker login
: 登录docker push <username>/<imageName>
: 将本地镜像推送到仓库docker start -ai <containerName>
: 启动一个已有的容器docker tag <imageName> username/repository:tag
docker swarm init
: 初始化并将本机启动为swarm模式. 成为swarm managerdocker swarm join
: 节点通过这个命令加入到swarm成为workerdocker swarm leave --force
: 强制当前节点脱离当前swarm以worker身份加入swarm, 其中token, ip, port根据具体swarm进行替换
docker swarm join \
--token <token> \
<ip>:<port>
docker stack deploy -c docker-compose.yml <APPName>
: 根据docker-compose.yml
启动一个名为APPName的服务docker stack ps <APPName>
: 查看启动的AppName服务状态docker stack rm <APPName>
: 关闭APPName服务
service docker start
:启动docker守护进程service docker stop
:关闭docker守护进程service docker restart
:重启docker守护进程docker pull [选项] [Docker Registry地址]<仓库名>[:标签]
具体选项通过docker pull --help
查看
[用户名/]<软件名>
, 对于Docker Hub如果不给出用户名, 默认为library
, 也就是官方镜像如docker pull ubuntu:14.04
docker run -it --rm ubuntu:14.04 bash
-i
: 交互式操作-t
: 终端--rm
: 容器退出后将其删除docker run -d -p 80:80 --name webserver nginx
镜像有两种类型
Dockerfile包含docker客户端在创建镜像时需要执行的命令. 这些命令基本上和对应的Linux命令一致.
FROM
指定镜像的base image:
FROM python:3-onbuild
接下来通常是编写命令复制文件并安装依赖. 通常onbuild
版本镜像会自动执行这些操作.
下一步指定我们需要对外暴露的端口:
EXPOSE 5000
最后一步是编写运行程序的命令, 如python ./app.py
. CMD
命令告诉容器启动之后执行那个命令.
CMD ["python", "./app.py"]
编写好Dockerfile之后执行docker build
根据文件指令创建镜像
mac下docker依次选择: Preference -> Advanced, 添加Registry mirrors
然后添加加速镜像地址
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
通过使用docker容器, 在新版nginx发布时我们只需要替换整个容器就可以完成升级. 我们只需要维护nginx配置文件和内容.
本文重点关注docker 容器下nginx的配置.
mkdir -p ~/docker-nginx/html
cd ~/docker-nignx/html
vim index.html
内容如下:
<html>
<head>
<title>Docker nginx Tutorial</title>
</head>
<body>
<div class="container">
<h1>Hello Digital Ocean</h1>
<p>This nginx page is brought to you by Docker and Digital Ocean</p>
</div>
</body>
</html>
链接本机目录到容器. 就可以在容器内直接访问本机对应目录. 这样只需要更新本机文件即可实现同步更新.
nginx容器默认在/usr/share/nginx/html
下查找首页.
docker run --name docker-nginx -p 80:80 -d -v ~/docker-nignx/html:/usr/share/nginx/html nginx
与-p
一样. -v
将指定容器目录映射到本机目录
此时访问首页.显示的就是刚才新建的文件.
现在新建about.html
也可以立即从浏览器访问到
docker可以方便扩容,负载均衡
镜像推送到托管镜像仓库后.添加docker-compose.yml
配置镜像运行参数:
version: "3"
services:
web:
image: qiudeqing/friendlyhello:latest
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- webnet
networks:
webnet:
主要功能如下:
web
容器通过网络负载均衡工具webnet
共享80端口webnet
网络(负载均衡)docker swarm init
docker stack deploy -c docker-compose.yml <appName>
其中appName
自己指定
Docker通过创建swarm集群实现多机.多容器扩容.
swarm是一组运行Docker并且加入了集群的机器. 机器加入集群之后运行的普通任务通过swarm manager机器进行管理, swarm manager可以添加worker到集群中. worker在集群中只是作为资源角色供manager调度, 本身不能执行授权和命令操作.
启动swarm模式的机器将成为swarm manager. 在上面操作的命令都会同步到swarm中所有机器.
可以通过集群中任意机器的ip访问服务. 负载均衡会自动在集群中选择机器提供服务, 所以即使访问固定ip也不用担心该机器超负荷工作.
为了保证负载均衡正常工作. 需要保证节点的以下端口可以使用:
设置好集群和配置文件之后. 日常维护只需要执行以下操作:
docker-compose.yml
docker stack deploy
: 应用最新修改docker stack rm
: 关闭应用docker swarm join
: 节点以worker加入到集群docker stack deploy
: 节点加入集群之后应用最新资源docker pull nginx
mkdir -p ~/docker-nginx/html
sudo docker run --name docker-nginx -p 80:80 -d -v /Users/songmengjiao/Desktop/project/crm/crm-fe-admin/dist:/usr/share/nginx/html nginx