转载请注明出处: http://qiudeqing.com/tools/2017/05/07/docker.html

常用命令

  1. docker info: 显示docker基本信息, 可以用来检查安装是否正确.
  2. docker pull [options] [<域名/ip>[:端口号]]<imageName>[:tag]: 拉取镜像到本地. tag是版本.默认最新版
  3. docker images [options] [repository[:tag]]: 查看本地镜像
  4. docker ps: 查看容器状态
  5. docker rm <contaienrId>: 删除特定container
  6. docker rm $(docker ps -a -q -f status=exited): 删除所有已经退出了的container
  7. docker rmi <imageName>: 删除指定镜像
  8. docker run -d -P --name static-site prakhar1989/static-site: -d表示detach终端, -P将容器监听的所有端口映射到主机的随机端口. --name给容器设置名字
  9. docker port <containerName>: 显示容器端口到主机端口对应关系
  10. docker run -p <hostPort>:<containerPort> prakhar1989/static-site: 启动容器, 将containerPort映射到主机hostPort
  11. docker stop <containerId>: 结束一个detach状态的容器
  12. docker build -f Dockerfile -t <username>/<imageName> .: 根据指定目录的Dockerfile创建镜像, -t指定tag, username是hub.docker.com用户名. imageName是镜像名..指定build的上下文. -f指定配置文件
  13. docker login: 登录
  14. docker push <username>/<imageName>: 将本地镜像推送到仓库
  15. docker start -ai <containerName>: 启动一个已有的容器
  16. docker tag <imageName> username/repository:tag
  17. docker swarm init: 初始化并将本机启动为swarm模式. 成为swarm manager
  18. docker swarm join: 节点通过这个命令加入到swarm成为worker
  19. docker swarm leave --force: 强制当前节点脱离当前swarm
  20. 以worker身份加入swarm, 其中token, ip, port根据具体swarm进行替换

    docker swarm join \
    --token <token> \
    <ip>:<port>
    
  21. docker stack deploy -c docker-compose.yml <APPName>: 根据docker-compose.yml启动一个名为APPName的服务
  22. docker stack ps <APPName>: 查看启动的AppName服务状态
  23. docker stack rm <APPName>: 关闭APPName服务

  24. service docker start:启动docker守护进程
  25. service docker stop:关闭docker守护进程
  26. service docker restart:重启docker守护进程

从Docker Registry获取镜像

docker pull [选项] [Docker Registry地址]<仓库名>[:标签]

具体选项通过docker pull --help查看

docker pull ubuntu:14.04

以镜像为基础启动容器

docker run -it --rm ubuntu:14.04 bash

demo

创建用户镜像

镜像有两种类型

Dockerfile

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

然后添加加速镜像地址

Ubuntu 14 docker 容器中部署nginx

通过使用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:

主要功能如下:

运行负载均衡后的app

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也不用担心该机器超负荷工作.

为了保证负载均衡正常工作. 需要保证节点的以下端口可以使用:

迭代扩容

设置好集群和配置文件之后. 日常维护只需要执行以下操作:

nginx

  1. 获取最新nginx镜像:docker pull nginx
  2. 在主机创建静态文件目录,文件:mkdir -p ~/docker-nginx/html
  3. 将容器链接到本地文件系统:
      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
    

参考资料