Docker 操作指南

Centos安装 Docker

查看你当前的内核版本 请确保版本大于等于 3.10

$ uname -r
  • 将yum 包更新到最新
$ sudo yum update
  • 如果有旧版本请先现在,否则可能引起错乱
$ sudo yum remove docker  docker-common docker-selinux docker-engine
  • 安装依赖 yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  • 设置yum源
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • 查看所有仓库中所有docker版本,确认版本
$ yum list docker-ce --showduplicates | sort -r
  • 安装docker 请根据项目需求安装版本
$ sudo yum install docker-ce  #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
$ sudo yum install <FQPN>  # 例如:sudo yum install docker-ce-17.12.0.ce
  • 启动并加入开机启动
$ sudo systemctl start docker
$ sudo systemctl enable docker
  • 查看docker信息(验证是否成功安装)
$ docker version

Ubuntu 18 安装 Docker

先更新一下

sudo apt update

然后分别进行

  1. 安装依赖
  2. 添加Dokcer官方密钥到系统中
  3. 添加docker源
  4. 更新一下源
  5. 开始安装docker
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update
sudo apt install docker-ce

Docker 语法

官网地址
DockerHub地址

语法结构

$ docker run ubuntu:15.10 /bin/echo "Hello world"

以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。

参数 说明
docker Docker 的二进制执行文件。
run 与前面的 docker 组合来运行一个容器。
ubuntu:15.10 指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
/bin/echo "Hello world" 在启动的容器里执行的命令

删除镜像

删除指定镜像

$ docker rmi --force `docker images | grep doss-api | awk '{print $3}'`    //其中doss-api为关键字

删除所有镜像

docker rmi `docker images -q`

停止所有容器

docker stop $(docker ps -a -q) //  stop停止所有容器

删除所有容器

$ docker  rm $(docker ps -a -q) //   remove删除所有容器

交互式终端

$ docker run -i -t imagename /bin/bash
参数 说明
-t 在新容器内指定一个伪终端或终端。
-i 允许你对容器内的标准输入 (STDIN) 进行交互。
-v 挂载宿主机的指定目录

接下来就可以允许 ls 等命令了 退出 exit

停止镜像

$ docker stop 容器ID

进程运行(后台模式)

$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

循环打印hello world 每秒一次

命令 描述
-d 让容器在后台运行。
-P 将容器内部使用的网络端口映射到我们使用的主机上。
-p -p 5000:5000 指定端口映射
docker ps 打印容器状态
docker logs 容器id 通过docker ps查到的id进行查询进程运行情况
docker stop 容器id 容器id停止

Docker 镜像操作

常用命令

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像

语法 描述
docker images 打印本机所有镜像
docker search 名 查找镜像
docker pull ubuntu:13.10 下载镜像

创建镜像

当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

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

方法1 更新镜像

需要使用镜像来创建一个容器,比如

$ docker run -t -i ubuntu:15.10 /bin/bash

1 随意更新一下容器,比如在容器内执行

$ apt-get update

2 exit 退出

3 提交

$ docker commit -m="has update" -a="runoob" id runoob/ubuntu:v2
参数 描述
-m 提交的描述信息
-a 指定镜像作者
id号 容器ID 进入容器后root@后
runoob/ubuntu:v2 指定要创建的目标镜像名

4 验证是否提交成功

$ docker images

5 进入测试

$ docker run -t -i runoob/ubuntu:v2 /bin/bash

方法2 构建镜像 常用

  1. 创建目录并创建Dockerfile文件
mkdir tes
    cd tes
    touch Dockerfile
    
    cat Dockerfile 
    
    // 命令区别
    touch:创建空白文档
    mkdir:创建一个目录
    vi:同touch一样,都是创建一个空白文档
  1. 需要创建一个 Dockerfile 文件,告诉docker要什么东西
runoob@runoob:~$ cat Dockerfile 
    FROM    centos:6.7
    MAINTAINER      Zok "362416272@qq.com"
    
    RUN     yum install -y httpd
    RUN     useradd runoob
    RUN     /bin/echo 'runoob:123456' |chpasswd
    RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
    EXPOSE  22
    EXPOSE  80
    CMD     /usr/sbin/sshd -D

  • FROM 指定使用哪个镜像源
  • MAINTAINER 设置作者名与联系邮箱
  • ENV 是环境变量设置,将/usr/local/bin:$PATH赋值给PATH,即增加/usr/local/bin这个环境变量路径。
  • ADD是将本地的代码放置到虚拟容器中。它有两个参数:第一个参数是.,代表本地当前路径;第二个参数是/code,代表虚拟容器中的路径,也就是将本地项目所有内容放置到虚拟容器的/code目录下,以便于在虚拟容器中运行代码
  • WORKDIR是指定工作目录,这里将刚才添加的代码路径设成工作路径。这个路径下的目录结构和当前本地目录结构是相同的,所以我们可以直接执行库安装命令、爬虫运行命令等。
  • RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
  • CMD是容器启动命令。在容器运行时,此命令会被执行。在这里我们直接用scrapy crawl quotes来启动爬虫。
  • EXPOSE 暴露端口
  • 然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

常见创建命令链接

  • 创建 -t 指定名称
$ docker build -t runoob/centos:6.7

上传私有

打上tag标签

$ docker tag quotes:latest wkunzhi/quotes:latest

上传

$ docker push wkunzhi/quotes

案例 - 运行web程序

1 载入镜像

$ docker pull training/webapp

2 启动服务

$ docker run -d -P training/webapp python app.py

3 查看端口情况 docker ps

$ docker ps

根据端口访问 http://127.0.0.1:32768/ 测试

4 查看 WEB 应用程序日志

$ docker logs -f 程序id
命令 描述
-f 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

5 查看WEB应用程序容器的进程

$ docker top 程序名或id

6 检查 WEB 应用程序(底层信息)

$ docker inspect 程序名或id

7 停止 WEB 应用容器

$ docker stop 程序名或id

8 重启WEB应用容器

$ docker start 容器name(通过ps查到)

9 移除WEB应用容器

$ docker rm 容器name(通过ps查到)

删除容器时,容器必须是停止状态,否则会报错

爬虫部署到Docker

1. 打包所需模块

在项目目录下创建一个 名为 requirements 的文件,文件内记录本项目用到的模块,如有特殊需求可设置模块版本号,例如:

scrapy
scrapy-redis
pymysql

2. 创建Dockerfile文件

Dockerfile 文件用于设定Docker初始化

$ touch Dockerfile
$ vim Dockerfile

Dockerfile 内容编辑

FROM python:3.7
MAINTAINER Zok "362416272@qq.com"
ENV PATH /usr/local/bin:$PATH
ADD . /code
WORKDIR /code
RUN pip3 install -r requirements
CMD scrapy crawl test
  • FROM 指定使用哪个镜像源
  • MAINTAINER 设置作者名与联系邮箱
  • ENV 是环境变量设置,将/usr/local/bin:$PATH赋值给PATH,即增加/usr/local/bin这个环境变量路径。
  • ADD是将本地的代码放置到虚拟容器中。它有两个参数:第一个参数是.,代表本地当前路径;第二个参数是/code,代表虚拟容器中的路径,也就是将本地项目所有内容放置到虚拟容器的/code目录下,以便于在虚拟容器中运行代码
  • WORKDIR是指定工作目录,这里将刚才添加的代码路径设成工作路径。这个路径下的目录结构和当前本地目录结构是相同的,所以我们可以直接执行库安装命令、爬虫运行命令等。
  • RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
  • CMD是容器启动命令。在容器运行时,此命令会被执行。在这里我们直接用scrapy crawl test来启动爬虫。

3. 调整数据库连接地址

通常我们在测试的时候填写连接的本地数据库(这样在服务器docker上是访问不了的)需要填写公网或服务器内外访问数据库连接地址

4. 构建镜像

  • 构建
$ docker build -t MySpider:latest .

命名格式: 仓库名:标签

  • 检查 是否构建成功
$ docker images
  • 运行测试
$ docker run 镜像名

5. 推送DockerHub

DockerHub 类似GitHub 你懂的, 没有账号需要注册一个 传送门

如果没有登陆,要先登陆docker

$ docker login

必须要先设置镜像标签才能推送

$ docker tag 本地的镜像名 注册用户名/自己起的hup镜像名

push到Hub上

$ docker push 注册用户名/自己起的hup镜像名

完成后可以在网站上看到你推送的镜像了

6. 服务器运行镜像

进入服务器 [在安装了docker的情况下] 私有项目,服务器上也需要登陆docker

$ docker run 注册用户名/自己起的hup镜像名

本地调试与修改镜像

vim下载安装

如果你用我上面的方法安装,是没有vim的需要额外安装

进入交互式镜像

$ docker run -i -t 镜像名 /bin/bash

在项目同级目录运行

$ apt-get update
$ apt-get install vim

保存修改

!!要保存时,要另外打开一个终端!进行保存操作

1 获取镜像ID

$ docker ps

2 提交保存

$ docker commit 查到的id 提交命名:tag

Docker对接Github

绑定github会让你的项目在每次commit后,自动构建一个docker镜像,无需自己操作,神器!

  1. github创建项目
  2. 项目中需要有Dockerfile文件
  3. 创建docker项目 并 在dockerhub中关联,注意私有仓库免费版只有1个
  4. 设置自动构建
    -w1167
    选择自动构建
    -w1113

总结: 论方便当然是git自动构建,但是本地构建可以构建好之后本地测试完毕后自主上传服务器,各有千秋,根据项目需求进行配置最佳


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!