Docker技术之环境搭建

2019-10-07 19:55 来源:未知

近日在研究容器相关的技术,看了vagrantDocker,最终我选择两个都研究下,现在我们来看看Docker的环境搭建。

通过yum安装

1. Ubuntu获取社区版docker(Docker CE,企业版Docker EE)

安装Docker之前, 先确认自己的机器是否满足条件

前提条件

为了安装Docker,你需要是Ubuntu任意64版本
输入一下命令:

$ uname -a

图片 1

Ubuntu版本

删除之前的老版本

$ sudo apt-get remove docker docker-engine docker.io

安装Docker CE

$ sudo apt-get update       # 1. 更新源
$ sudo apt-get install 
   apt-transport-https 
   ca-certificates 
   curl 
   software-properties-common  ## 允许apt通过HTTPS安装工具包
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
                               ## 3. 添加Docker的官方 GPG key

现在, 验证一下你已经拥有GPG Key:

$ sudo apt-key fingerprint 0EBFCD88
>>>>>>>>>>>>>>>>>>>>>
pub   4096R/0EBFCD88 2017-02-22
  Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-02-22

添加docker库到apt源:

$ sudo add-apt-repository 
"deb [arch=amd64] https://download.docker.com/linux/ubuntu 
$(lsb_release -cs) 
stable"

执行安装:

$ sudo apt-get update
$ sudo apt-get install docker-ce

生产环境需要固定安装某一版本,而不是安装最新版本, 需要使用 sudo apt-get install docker-ce=<VERSION>

测试Docker安装是否正确

 sudo docker run hello-world

这条命令下载了一个测试镜像, 并且把它运行在一个docker容器里, 这个容器打印出一条信息就退出了。

你也可以输入:

$ sudo docker version
# 或者
$ sudo docker info

查看docker的相关版本信息

零. 前期说明

笔者所有的操作系统是DeepIn 15.3,这个由深度科技基于Debian开发的操作系统。

基于以上的条件,我们安装Docker也会参考Docker官网上关于Debian的安装手册。

传送门:DockerDebian官方手册

需要root或者能sudo的权限

2. Docker配置

Docker 需要用户具有 sudo 权限,为了避免每次命令都输入sudo,可以把用户加入 Docker 用户组。官方文档

  1. 创建 docker 用户组;

     $ sudo groupadd docker
    
  2. 将你的当前用户添加到 docker 用户组;(可能会失败, 我在Azure上操作就报错)

     $ sudo usermod -aG docker $USER
    
  3. 注销之后重新登录, 使刚刚的权限设置生效;

  4. 验证权限,这次不再需要sudo开头了。

     $ docker run hello-world
    

启动docker服务

命令行运行docker命令的时候,需要本机有 Docker 服务。如果这项服务没有启动,可以用下面的命令启动

# service 命令的用法
$ sudo service docker start

# systemctl 命令的用法
$ sudo systemctl start docker

一、准备工作

yum包更新到最新

3. image文件

Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。

# 列出本机的所有 image 文件。
$ docker image ls

# 删除 image 文件
$ docker image rm [imageName]

image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,我们应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。

为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库 Docker Hub 是最重要、最常用的 image 仓库。此外,出售自己制作的 image 文件也是可以的。

卸载之前的Docker

sudo apt-get remove docker docker-engine docker.io
$ sudo yum update

4. 运行简单实例 hello world

首先,运行下面的命令,将 image 文件从仓库抓取到本地

docker image pull library/hello-world

Docker 官方提供的 image 文件,都放在library组里面

现在本地可以看到这个hello-world镜像

$ docker image ls

运行镜像

$ docker container run hello-world

如果运行成功,你会在屏幕上读到下面的输出。

Hello from Docker!
This message shows that your installation appears to be working correctly.

输出这段提示以后,hello world就会停止运行,容器自动终止。

有些容器不会自动终止,因为提供的是服务。比如,安装运行 Ubuntu 的 image,就可以在命令行体验 Ubuntu 系统。

> $ docker container run -it ubuntu bash

对于那些不会自动终止的容器,必须使用docker container kill 命令手动终止。

$ docker container kill [containID]

更新apt软件索引

sudo apt-get update

添加Docker yum源

5. 容器文件

image 文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。

# 列出本机正在运行的容器
$ docker container ls

# 列出本机所有容器,包括终止运行的容器
$ docker container ls --all

如果担心容器文件占据空间, 可以使用 docker container rm [containerID] 命令删除

二、开始安装Docker

$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

6. 制作自己的Docker容器

下面以阮一峰大师的koa-demos 项目为例,介绍怎么写 Dockerfile 文件,实现让用户在 Docker 容器里面运行 Koa 框架。

作为准备工作,请先下载源码。

$ git clone https://github.com/ruanyf/koa-demos.git
$ cd koa-demos

编写Dockerfile文件

首先,在项目的根目录下,新建一个文本文件.dockerignore,写入下面的内容。

.git
node_modules
npm-debug.log

上面代码表示,这三个路径要排除,不要打包进入 image 文件。如果你没有路径要排除,这个文件可以不新建。

然后,在项目的根目录下,新建一个文本文件 Dockerfile,写入下面的内容。

FROM node:8.4
COPY . /app
WORKDIR /app
RUN npm install --registry=https://registry.npm.taobao.org
EXPOSE 3000

上面代码一共五行,含义如下。

  • FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。
  • COPY . /app:将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。
  • WORKDIR /app:指定接下来的工作路径为/app
  • RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
  • EXPOSE 3000:将容器 3000 端口暴露出来, 允许外部连接这个端口。

创建 image 文件

有了 Dockerfile 文件以后,就可以使用docker image build命令创建 image 文件了。

$ docker image build -t koa-demo .
# 或者
$ docker image build -t koa-demo:0.0.1 .

上面代码中,-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest。最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。

如果运行成功,就可以看到新生成的 image 文件koa-demo了。

$ docker image ls

生成容器

docker container run命令会从 image 文件生成容器。

$ docker container run -p 8000:3000 -it koa-demo /bin/bash
# 或者
$ docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash

上面命令的各个参数含义如下:

  • -p参数:容器的 3000 端口映射到本机的 8000 端口。
  • -it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。
  • koa-demo:0.0.1:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
  • /bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。
    如果一切正常,运行上面的命令以后,就会返回一个命令行提示符。
root@66d80f4aaf1e:/app#

这表示你已经在容器里面了,返回的提示符就是容器内部的 Shell 提示符。执行下面的命令。

root@66d80f4aaf1e:/app# node demos/01.js

这时,Koa 框架已经运行起来了。打开本机的浏览器,访问 Found",这是因为这个 demo没有写路由。

这个例子中,Node 进程运行在 Docker 容器的虚拟环境里面,进程接触到的文件系统和网络接口都是虚拟的,与本机的文件系统和网络接口是隔离的,因此需要定义容器与物理机的端口映射(map)。

CMD命令

上一节的例子里面,容器启动以后,需要手动输入命令node demos/01.js。我们可以把这个命令写在 Dockerfile 里面,这样容器启动以后,这个命令就已经执行了,不用再手动输入了。

FROM node:8.4
COPY . /app
WORKDIR /app
RUN npm install --registry=https://registry.npm.taobao.org
EXPOSE 3000
CMD node demos/01.js

上面的 Dockerfile 里面,多了最后一行CMD node demos/01.js,它表示容器启动后自动执行node demos/01.js。

你可能会问,RUN命令与CMD命令的区别在哪里?简单说,RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。

注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令。现在,启动容器可以使用下面的命令。

$ docker container run --rm -p 8000:3000 -it koa-demo:0.0.1

安装所依赖的库文件

sudo apt-get install 
     apt-transport-https 
     ca-certificates 
     curl 
     gnupg2 
     software-properties-common 
     python-software-properties

安装Docker包

添加Docker的官方GPG

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - 
$ sudo yum install docker-engine

添加source.list添加Docker

sudo add-apt-repository  "deb [arch=amd64] https://download.docker.com/linux/debian wheezy stable“ 

启动Docker守护进程

最后更新源

sudo apt-get update
$ sudo service docker start

三、安装Docker-ce

sudo apt-get -y install docker-ce 

通过测试镜像运行一个容器来验证Docker是否安装正确

root用户身份管理Docker

$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
  latest: Pulling from hello-world
  a8219747be10: Pull complete
  91c95931e552: Already exists
  hello-world:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
  Digest: sha256:aa03e5d0d5553b4c3473e89c8619cf79df368babd1.7.1cf5daeb82aab55838d
  Status: Downloaded newer image for hello-world:latest
  Hello from Docker.
  This message shows that your installation appears to be working correctly.


  To generate this message, Docker took the following steps:
   1. The Docker client contacted the Docker daemon.
   2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
      (Assuming it was not already locally available.)
   3. The Docker daemon created a new container from that image which runs the
      executable that produces the output you are currently reading.
   4. The Docker daemon streamed that output to the Docker client, which sent it
      to your terminal.


  To try something more ambitious, you can run an Ubuntu container with:
   $ docker run -it ubuntu bash


  For more examples and ideas, visit:
   http://docs.docker.com/userguide/
TAG标签:
版权声明:本文由金沙澳门官网4166发布于中国史,转载请注明出处:Docker技术之环境搭建