前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版

Docker小结篇

首页2018-11-20 10:20:10Back-End
Docker部署

Docker 是一个开源的应用容器引擎,而一个容器其实是一个虚拟化的独立的环境,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

  • Docker 的局限性之一,它只能用在 64 位的操作系统上。

# 一、安装

yum install docker        # CentOS 中安装
apt-get install docker-ce # Ubuntu 中安装
pacman -S docker          # Arch 中安装
emerge --ask docker       # Gentoo 中安装

#=====================

docker version      # 通过查看版本,检查安装是否成功
# Client:
#  Version:         1.12.6
#  API version:     1.24
#  Package version: docker-1.12.6-55.gitc4618fb.el7.centos.x86_64
#  Go version:      go1.8.3
#  Git commit:      c4618fb/1.12.6
#  Built:           Thu Sep 21 22:33:52 2017
#  OS/Arch:         linux/amd64
# 
# Server:
#  Version:         1.12.6
#  API version:     1.24
#  Package version: docker-1.12.6-55.gitc4618fb.el7.centos.x86_64
#  Go version:      go1.8.3
#  Git commit:      c4618fb/1.12.6
#  Built:           Thu Sep 21 22:33:52 2017
#  OS/Arch:         linux/amd64
@前端进阶之旅: 代码已经复制到剪贴板

# 二、命令介绍

$ docker --help

管理命令:
  container   管理容器
  image       管理镜像
  network     管理网络
命令:
  attach      介入到一个正在运行的容器
  build       根据 Dockerfile 构建一个镜像
  commit      根据容器的更改创建一个新的镜像
  cp          在本地文件系统与容器中复制 文件/文件夹
  create      创建一个新容器
  exec        在容器中执行一条命令
  images      列出镜像
  kill        杀死一个或多个正在运行的容器    
  logs        取得容器的日志
  pause       暂停一个或多个容器的所有进程
  ps          列出所有容器
  pull        拉取一个镜像或仓库到 registry
  push        推送一个镜像或仓库到 registry
  rename      重命名一个容器
  restart     重新启动一个或多个容器
  rm          删除一个或多个容器
  rmi         删除一个或多个镜像
  run         在一个新的容器中执行一条命令
  search      在 Docker Hub 中搜索镜像
  start       启动一个或多个已经停止运行的容器
  stats       显示一个容器的实时资源占用
  stop        停止一个或多个正在运行的容器
  tag         为镜像创建一个新的标签
  top         显示一个容器内的所有进程
  unpause     恢复一个或多个容器内所有被暂停的进程
@前端进阶之旅: 代码已经复制到剪贴板

# 三、服务管理

service docker start       # 启动 docker 服务,守护进程
service docker stop        # 停止 docker 服务
chkconfig docker on        # 设置为开机启动
@前端进阶之旅: 代码已经复制到剪贴板

# 四、镜像管理

镜像可以看做我们平时装系统的镜像,里面就是一个运行环境。

docker pull centos:latest  # 从docker.io中下载centos镜像到本地
docker images              # 查看已下载的镜像
docker rm image_id         # 删除镜像,指定镜像id

# 删除所有镜像
# none 默认为 docker.io
docker rmi $(docker images | grep none | awk '{print $3}' | sort -r)

# 连接进行进入命令行模式,exit命令退出。
docker run -t -i nginx:latest /bin/bash
@前端进阶之旅: 代码已经复制到剪贴板

# 4.1 通过容器创建镜像

我们可以通过以下两种方式对镜像进行更改。

  1. 从已经创建的容器中更新镜像,并且提交这个镜像
  2. 使用 Dockerfile 指令来创建一个新的镜像

下面通过已存在的容器创建一个新的镜像。

docker commit -m="First Docker" -a="wcjiang" a6b0a6cfdacf wcjiang/nginx:v1.2.1
@前端进阶之旅: 代码已经复制到剪贴板

上面命令参数说明:

  • -m 提交的描述信息
  • -a 指定镜像作者
  • a6b0a6cfdacf 记住这个是容器id,不是镜像id
  • wcjiang/nginx:v1.2.1 创建的目标镜像名

# 4.2 发布自己的镜像

  1. 在 Docker 注册账户,发布的镜像都在 这个页面里展示
  2. 将上面做的镜像nginx,起个新的名字nginx-test
docker tag wcjiang/nginx:v1.2.1 wcjiang/nginx-test:lastest
@前端进阶之旅: 代码已经复制到剪贴板
  1. 登录docker
docker login
@前端进阶之旅: 代码已经复制到剪贴板
  1. 上传nginx-test镜像
docker push wcjiang/nginx-test:lastest
# The push refers to a repository [docker.io/wcjiang/nginx-test]
# 2f5c6a3c22e3: Mounted from wcjiang/nginx
# cf516324493c: Mounted from wcjiang/nginx
# lastest: digest: sha256:73ae804b2c60327d1269aa387cf782f664bc91da3180d10dbd49027d7adaa789 size: 736
@前端进阶之旅: 代码已经复制到剪贴板

# 4.3 镜像中安装软件

通常情况下,使用docker官方镜像,如 mysql镜像,默认情况下镜像中啥软件也没有,通过下面命令安装你所需要的软件:

# 第一次需要运行这个命令,确保源的索引是最新的
# 同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引
apt-get update
# 做过上面更新同步之后,可以运行下面的命令了
apt-get install vim
@前端进阶之旅: 代码已经复制到剪贴板

如果你安装了CentOS或者Ubuntu系统可以进入系统安装相关软件

# 进入到centos7镜像系统
docker run -i -t centos:7 /bin/bash
yum update
yum install vim
@前端进阶之旅: 代码已经复制到剪贴板

# 五、容器管理

容器就像一个类的实例

docker run centos echo "hello world"  # 在docker容器中运行hello world!
docker run centos yum install -y wget # 在docker容器中,安装wget软件
docker ps                           # 列出包括未运行的容器
docker ps -a                        # 查看所有容器(包括正在运行和已停止的)
docker logs my-nginx                # 查看 my-nginx 容器日志

docker run -i -t centos /bin/bash   # 启动一个容器
docker inspect centos     # 检查运行中的镜像
docker commit 8bd centos  # 保存对容器的修改
docker commit -m "n changed" my-nginx my-nginx-image # 使用已经存在的容器创建一个镜像
docker inspect -f {{.State.Pid}} 44fc0f0582d9 # 获取id为 44fc0f0582d9 的PID进程编号
@前端进阶之旅: 代码已经复制到剪贴板

# 5.1 容器服务管理

docker run -itd --name my-nginx2 nginx # 通过nginx镜像,【创建】容器名为 my-nginx2 的容器
docker start my-nginx --restart=always    # 【启动策略】一个已经存在的容器启动添加策略
                               # no - 容器不重启
                               # on-failure - 容器推出状态非0时重启
                               # always - 始终重启
docker start my-nginx               # 【启动】一个已经存在的容器
docker restart my-nginx             # 【重启】容器
docker stop my-nginx                # 【停止运行】一个容器
docker kill my-nginx                # 【杀死】一个运行中的容器
docker rename my-nginx new-nginx    # 【重命名】容器
docker rm new-nginx                 # 【删除】容器
@前端进阶之旅: 代码已经复制到剪贴板

# 5.2 进入容器

  1. 创建一个守护状态的Docker容器
docker run -itd my-nginx /bin/bash
@前端进阶之旅: 代码已经复制到剪贴板
  1. 使用docker ps查看到该容器信息
docker ps
# CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
# 6bd0496da64f        nginx               "/bin/bash"         20 seconds ago      Up 18 seconds       80/tcp              high_shirley
@前端进阶之旅: 代码已经复制到剪贴板
  1. 使用docker exec命令进入一个已经在运行的容器
docker exec -it 6bd0496da64f /bin/bash
@前端进阶之旅: 代码已经复制到剪贴板

通常有下面几种方式进入Docker的容器,推荐使用exec,使用attach一直进入失败。

  • 使用docker attach
  • 使用SSH 为什么不需要在 Docker 容器中运行 sshd
  • 使用nsenter进入Docker容器, nsenter官方仓库
  • 使用docker exec,在1.3.*之后提供了一个新的命令exec用于进入容器

# 六、使用Docker实战

# 6.1 部署Nginx

1.在 docker hub 中查找 nginx 相关镜像。

fe
  • 一、安装
  • 二、命令介绍
  • 三、服务管理
  • 四、镜像管理
    • 4.1 通过容器创建镜像
    • 4.2 发布自己的镜像
    • 4.3 镜像中安装软件
  • 五、容器管理
    • 5.1 容器服务管理
    • 5.2 进入容器
  • 六、使用Docker实战
    • 6.1 部署Nginx
    • 6.2 部署MySQL
  • 七、Docker私有仓库搭建
    • 7.1 部署registry
    • 7.2 部署Humpback
  • 八、参考资料
    • 8.1 官方英文资源
    • 8.2 中文资源
    • 8.3 其它资源

← 工作中常用的Nginx配置总结回顾Docker入门基础篇 镜像容器网络数据卷与Compose全梳理 →