如何部署Docker容器环境?

Docker

1 基础知识

1.1 基本概念

1.1.1 Docker的基本概念

– Docker是开发人员和系统管理员使用的容器
– Docker是用于开发,部署和运行应用程序的平台
注:
– 使用Linux容器来部署应用程序称为集装箱化
– 用于轻松部署应用程序

1.1.2 镜像(Images)

镜像的实质是一个可执行的包,包括应用程序代码、运行状态、库、环境变量和配置文件等。

1.1.3 容器(containers)

容器是镜像运行时的实例,即镜像执行是在内存中的内容

1.1.4 容器与虚拟机的区别

– 容器直接共享主机或其他容器的内核,独立运行的进程不占用任何其他可执行文件的内存,因此更轻量。
– 虚拟机运行一个完整的客户操作系统,因此需要使用更多的资源。

1.2 使用对象

– 开发人员
– 系统管理员

1.3 Docker的作用

– 用于开发
– 用于部署

1.4 Docker的特点


– 灵活,Docker能适应负责的应用程序装箱
– 轻量级,容器可直接利用并共享主机内核
– 可互换,可即时部署更新和升级
– 可扩展,可自由增加和自动分发容器副本
– 可堆叠,可垂直堆叠服务并即时堆叠服务

1.5 Docker的版本

– 社区版(CE,Community Edition),适用于个人开发人员或小团队(适用于尝试使用容器)
– 企业版(EE,Enterprise Edition),适用于企业开发和IT团队(适用于生产构建、发布和运行关键业务程序)

2 安装部署

2.1 系统环境配置

In docker-m & docker-n[1-2]

2.1.1 配置网络环境

nmcli connection modify ens33 ipv4.addresses "10.168.0.6X/24"
nmcli connection modify ens33 ipv4.gateway "10.168.0.1"
nmcli connection modify ens33 ipv4.method m
nmcli connection modify ens33 ipv6.method i
nmcli connection modify ens33 connection.autoconnect yes
nmcli connection up ens33

2.1.2 配置主机名称

In docker-m & docker-n[1-2]

hostnamectl set-hostname docker-XX.cmdschool.org
reboot

2.1.3 配置名称解析

In docker-m & docker-n[1-2]

 
echo "10.168.0.60 docker-m docker-m.cmdschool.org" >> /etc/hosts
echo "10.168.0.61 docker-n1 docker-n1.cmdschool.og" >> /etc/hosts
echo "10.168.0.61 docker-n2 docker-n2.cmdschool.org" >> /etc/hosts

2.1.4 安装常用工具

In docker-m & docker-n[1-2]

yum install -y vim

2.2 软件环境配置

2.2.1 手动配置Docker的源

In docker-m & docker-n[1-2]

vim /etc/yum.repos.d/docker.repo

使用国内源建议加入如下配置,

[docker]
name=docker
baseurl=http://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/docker-ce/linux/centos/gpg

使用官方源请加入如下配置(可选),

[docker]
name=docker
baseurl=https://download.docker.com/linux/centos/7/x86_64/stable/
gpgcheck=1
gpgkey=https://download-stage.docker.com/linux/centos/gpg

2.2.2 自动配置Docker的源(可选)

In docker-m & docker-n[1-2]

curl https://download.docker.com/linux/centos/docker-ce.repo > /etc/yum.repos.d/docker-ce.repo

2.3 Docker的安装

2.3.1 安装DockerCE相关包

In docker-m & docker-n[1-2]

yum install -y docker-ce

验证管理用户的创建,

grep -i docker /etc/group /etc/passwd

显示如下:

/etc/group:docker:x:995:

注:docker组已经创建,但尚未有用户加入该组

2.3.2 启动Docker并配置自启动

In docker-m & docker-n[1-2]

systemctl enable docker.service
systemctl start docker.service
systemctl status docker.service

2.3.3 修改Docker存储位置

In docker-m & docker-n[1-2] 查看存储的类型与位置

docker info | egrep -i "Docker Root Dir|Storage Driver"

显示如下:

Storage Driver: overlay2
Docker Root Dir: /var/lib/docker

停止Dcoker的服务

systemctl stop docker

定义新的存储位置:

vim /usr/lib/systemd/system/docker.service

更改如下参数:

[Service]
ExecStart=/usr/bin/dockerd --graph=/data/docker-runningdata --storage-driver=overlay2

重载服务配置

systemctl daemon-reload

迁移存储数据

mkdir /data
mv /var/lib/docker /data/docker-runningdata

启动Dcoker的服务

systemctl start docker

确认钱以后的存储的类型与位置

docker info | egrep -i "Docker Root Dir|Storage Driver"

显示如下:

Storage Driver: overlay2
Docker Root Dir: /data/docker-runningdata

2.3.4 校验安装的版本

In docker-m & docker-n[1-2]

docker --version

2.3.5 查看更详细的版本

In docker-m & docker-n[1-2]

docker info

信息显示如下:

Containers: 0
 Running: 0
 Paused: 0
[…]

2.3.6 配置Docker用户与权限(可选)

2.3.6.1 创建用户

In docker-m & docker-n[1-2]

useradd docker -g docker -d /data/docker
echo docker | passwd --stdin docker

2.3.6.2 配置用户权限

In docker-m & docker-n[1-2]

visudo

2.3.6.3 加入如下配置

docker ALL=(root) NOPASSWD: /usr/bin/docker,\
                            /bin/* /data/docker/*,\
                            /bin/* -* /data/docker/*,\
                            /bin/* *\:* /data/docker/*,\
                            /usr/sbin/* /data/docker/*,\
                            /usr/sbin/* -* /data/docker/*,\
                            /usr/sbin/* *\:* /data/docker/*,\
                            /usr/bin/* /data/docker/*,\
                            /usr/bin/* -* /data/docker/*,\
                            /usr/bin/* *\:* /data/docker/*

2.3.6.4 创建sudo日志文件

In docker-m & docker-n[1-2]

touch /var/log/sudo.log

2.3.6.5 配置sudo日志

In docker-m & docker-n[1-2]

visudo

在“Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin”下加入如下行:

Defaults logfile=/var/log/sudo.log
Defaults loglinelen=0
Defaults !syslog

2.3.6.6 系统开启sudo日志

In docker-m & docker-n[1-2] 修改日志配置文件:

vim /etc/rsyslog.conf

在“local7.*”行后加入如下行:

local2.debug                                            /var/log/sudo.log

重启系统日志服务:

systemctl restart rsyslog

2.3.7 代码测试Docker安装

2.3.7.1 创建hell-work代码

In docker-m

vim hell-work

加入如下代码:

FROM scratch
COPY hello /
CMD ["/hello"]

2.3.7.2 运行hell-work代码

In docker-m

docker run hello-world

信息显示如下:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:f5233545e43561214ca4891fd1157e1c3c563316ed8e237750d59bde73361e77
Status: Downloaded newer image for hello-world:latest

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

2.3.7.3 列出hell-world下载的镜像

In docker-m

docker image ls

信息显示如下:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              e38bc07ac18e        6 weeks ago         1.85kB

2.3.7.4 列出hell-world显示消息退出的容器

In docker-m

docker container ls
docker container ls --all
docker container ls -aq

其中带all参数的命令行显示如下:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
078d19a0260e        hello-world         "/hello"            7 minutes ago       Exited (0) 7 minutes ago                       priceless_wozniak

注:all参数可以显示退出的容器

参阅文档:
=============================

基本概念:
—————————–
https://docs.docker.com/get-started/#test-docker-version

安装Docker:
—————————–
https://docs.docker.com/install/

官方源地址:
—————————–
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

没有评论

发表回复

Docker
如何修复连接Docker容器虚机无响应?

1 前言 一个问题,一篇文章,一出故事。 笔者最近使用如下命令连接容器发现一直没有响应, docke …

Docker
如何打包Docker Nginx?

1 前言 一个问题,一篇文章,一出故事。 由于docker hub原版本的nginx镜像过于精简,于 …

Docker
如何打包Docker MAC-Telnet?

1 基础知识 一款可以使用MikroTik RouterOS MAC-Telnet协议连接Mikro …