文章目录
一.docker原理
Docker 包括三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
概念 | 说明 |
---|---|
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统 |
Docker 容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体 |
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker 仓库(Registry) | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
二.安装docker并启动
环境:centos7
(1)环境准备:关闭防火墙、selinux和swap。
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
(2)方法一:
yum update -y
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
(3)方法二:
yum install -y wget
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all && yum makecache
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum install -y docker-ce-18.09.7 docker-ce-cli-18.09.7 containerd.io
启动docker:
systemctl enable docker
systemctl start docker
测试是否启动成功:
docker info / docker version
三.编写Dockerfile文件
FROM python:3.6
MAINTAINER name "xxxxx@qq.com"
ENV PATH /usr/local/bin:$PATH
ADD . /code
WORKDIR /code/TestSpider
RUN pip3 install -r requirements
CMD /usr/local/bin/scrapy crawl test
- FROM 指定使用哪个镜像源
- MAINTAINER 设置作者名与联系邮箱
- ENV 是环境变量设置,将/usr/local/bin:$PATH赋值给PATH,即增加/usr/local/bin这个环境变量路径。
- ADD是将本地的代码放置到虚拟容器中。它有两个参数:第一个参数是 “ . ”,代表本地当前路径;第二个参数是/code,代表虚拟容器中的路径,也就是将本地项目所有内容放置到虚拟容器的/code目录下,以便于在虚拟容器中运行代码
- WORKDIR是指定工作目录,这里将刚才添加的代码路径设成工作路径。这个路径下的目录结构和当前本地目录结构是相同的,所以我们可以直接执行库安装命令、爬虫运行命令等。
- RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
- CMD是容器启动命令。在容器运行时,此命令会被执行。在这里我们直接用scrapy crawl test来启动爬虫。
四.构建Docker镜像
docker build -t spider:0.01 .
注意后面有个点
运行测试:
docker run 镜像名
五.搭建私有仓库
(1)搭建私有镜像仓库并查看
docker pull registry
docker images
(2)创建文件夹,往文件中添加密码
cd /opt/
mkdir auth
cd /opt/auth/
echo "user:root passwd:123456" >htpasswd
cd ..
docker run --entrypoint htpasswd registry:latest -Bbn root 123456 >auth/htpasswd
cat auth/htpasswd
## 类似 root:$2y$05$KBeLoXDIaXwSzt7ah/gUGOrbPTfsT/Uy2j92YXCuMBkg.Kl2b2Jby
(3)启动registry1容器 ,默认端口5000映射到5000
docker run -d -p 5000:5000 --restart=always --name registry1 \
-v `pwd`/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry
(4)搭建私有镜像仓库
配置使用私有仓库
vim /etc/docker/daemon.json
##添加如下内容:
{
"insecure-registries":["192.168.5.120:5000"]
}
重启服务
systemctl restart docker
六.上传镜像到仓库
(1)登录私有仓库
docker login 192.168.5.120:5000
输入之前设定的账号密码,如下所示则成功
(2)给镜像打tag
docker tag spider:0.01 192.168.5.120:5000/spider:0.01
(3)上传到仓库
docker push 192.168.5.120:5000/spider:0.01
七.将爬虫镜像下载到本地
(1)登录私有仓库
docker login 192.168.5.120:5000
(2)下载镜像
# 先删除本地镜像
docker rmi -f 192.168.5.120:5000/spider:0.01
# 查看所有镜像
docker images
# 下载镜像
docker pull 192.168.5.120:5000/spider:0.01
八.启动容器
docker run 192.168.5.120:5000/spider:0.01
九.自己配置需要的环境并保存镜像
(1)注册docker hub 账号并登录
(2)下载centos镜像或ubuntu镜像
docker pull centos
(3)进入centos容器交互模式
docker run -i -t centos /bin/bash
(4)在centos容器配置需要的环境
配置环境变量
vim /etc/profile
在容器内source是没有作用的,退出容器调用镜像的时候环境变量并未生效
cd ~
vim ./.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
source /etc/profile # 在次数添加刷新环境变量的命令
fi
(5)退出centos容器并保存
Ctrl + P + Q # 退出容器
docker ps -a # 查看运行的容器ID
docker stop 容器ID # 停止容器
docker commit 容器ID 新容器名称 # 从容器创建一个新的镜像