Docker 安装、使用

Docker 教程

1. 前言

  • Docker 是一个开源的应用容器引擎,基于Go语言,并遵从Apache 2.0 协议开源。
  • Docker 可以让开发者打包应用及依赖包到一个轻量级、可移植的容器,之后发布到Linux ,实现虚拟化。
  • 容器是完全使用沙箱机制,相互之间不存在任何接口,并容器性能开销极低。
  • Docker 官网:https://www.docker.com/
  • Github Docker 源码:https://github.com/docker/docker-ce

2. Docker 应用场景

  1. Web 应用的自动化打包和发布;
  2. 自动化测试和持续集成、发布;
  3. 在服务型环境中部署和调整数据库或其他的后台应用;
  4. 从头编译或者扩展现有的OpenShiftCloud Foundry 平台搭建 Paas 环境。

3. Docker 优点

3.1 快速,一致地交付应用程序

  • Docker 允许开发人员使用提供的应用程序或服务的本地容器在标准化环境中工作,从而简化开发的生命周期。

3.2 响应式部署和扩展

  • Docker 是基于容器的平台,允许高度可移植的工作负载。Docker容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
  • Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

3. 在同一硬件上运行更多工作负载

  • Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。
  • Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

4. Docker 架构

  • Docker 基本概念:镜像、容器、仓库

4.1 镜像

  • Docker 镜像(Image)相当于是root文件系统。类似于面向对象中的类。

4.2 容器

  • 容器(Container): 类似于面向对象中的以类创建的实例。镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停。

4.3 仓库

  • 仓库(Repository): 代码控制中心,用来保存镜像。

4.4 Docker 基本概念介绍

  • Docker 镜像(Image): 适用于创建容器的模板;
  • Docker 容器(Container): 是独立运行的一个或一组应用,是镜像运行的实体;
  • Docker 客户端(Client): Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker的守护进程通信;
  • Docker 主机(Host): 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器;
  • Docker 仓库(Repository): Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库;Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用;一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像;通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
  • Docker Machine: Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBoxDigital OceanMicrosoft Azure

5. Docker 安装

5.1 Centos Docker 安装

  1. 卸载之前安装的版本(如果服务器上没有安装过,忽略这步操作)
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
  1. 添加 docker yum
# 1. 官方源地址
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 2. 阿里云源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3. 清华大学源
yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
  1. yum 安装 docker
yum install docker-ce docker-ce-cli containerd.io
  1. 验证 docker 是否安装成功
docker info
  1. 配置 docker 开机启动
systemctl enable --now docker.service
systemctl enable --now docker.socket

5.2 Centos8 部署docker(阿里云安装方式)

# 1. 安装 docker 存储依赖
dnf install -y device-mapper-persistent-data lvm2

# 2. 设置添加docker软件阿里源
dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 3. 运行命令,查看添加的 Docker 软件源
dnf list docker-ce

# 4. 运行命令安装 Docker
dnf install -y docker-ce --nobest
# 5. 启动 Docker
systemctl start	docker

5.3 Centos7 部署docker(阿里云安装方式)

# 1. 安装 docker 依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 2. 设置添加docker软件阿里源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3. 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# 4. 启动docker
sudo service docker start

# 注意:其他注意事项在下面的注释中
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
# 注意:在某些版本之后,docker-ce安装出现了其他依赖包,如果安装失败的话请关注错误信息。例如 docker-ce 17.03 之后,需要先安装 docker-ce-selinux。
# yum list docker-ce-selinux- --showduplicates | sort -r
# sudo yum -y install docker-ce-selinux-[VERSION]

# 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2中的命令
# 经典网络:
# sudo yum-config-manager --add-repo http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
# VPC网络:
# sudo yum-config-manager --add-repo http://mirrors.could.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo

5.4 Ubuntu 14.04 16.04 安装 docker

# apt-get 安装
# step 1. 安装 docker 依赖包
sudo apt-get update
sudo apt-get -y install apy-transport-https ca-certificates curl software-properties-common

# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装 Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce

# 注意:其他注意事项在下面的注释中
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
#   docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
#   docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]

# 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2、Step 3中的命令
# 经典网络:
# curl -fsSL http://mirrors.aliyuncs.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyuncs.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# VPC网络:
# curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# sudo add-apt-repository "deb [arch=amd64] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

6. Docker 使用

6.1 Centos8 使用docker(阿里云提供方式)

6.1.1 管理Docker 守护进程
# 查看 Docker 状态
systemctl status docker
# 启动 Docker
systemctl start docker
# 停止 Docker
systemctl stop docker
# 重启 Docker
systemctl restart docker
# 设置 Docker 开机启动
systemctl enable docker
6.1.2 镜像加速器
  • 注:命令支持(Ubuntu / CentOS)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF' 
{
	"registry-mirrors": ["https://m1i2r0y7.mirror.aliyuncs.com"] 
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 查看验证镜像加速器
docker info
6.1.2 管理镜像
# 1. 获取镜像。
# 从Docker 镜像仓库获取镜像 docker pull
docker pull [选项][Docker Registry地址[:端口号]/]仓库名[:标签]
# Docker镜像仓库地址:地址的格式一般是<域名/IP>[:端口号]。默认地址是Docker Hub。
# 仓库名:如之前所说,这里的仓库名是两段式名称,即<用户名>/<软件名>。
# 对于Docker Hub,如果不给出用户名,则默认为library,也就是官方镜像。
# 举例 拉取Apache-php5 镜像
docker pull registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
# 修改标签(当镜像名称较长,可以修改镜像标签)
docker tag registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5:latest aliweb:v1
# 查看已有镜像
docker images
# 强制删除镜像(默认标签latest,可以省略)
docker rmi -f REPOSITORY:TAG
docker rmi -f registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
6.1.3 管理容器
# 创建容器  Create a new container
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
# 常用参数
--name: 设置容器名称
-p: 指定端口映射,hostPost: containerPort
-P: 随机指定端口映射(一般不用这个参数)
-e: 配置信息
	例:配置mysql 超级管理员密码
docker create --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root IMAGE_ID/IMAGE_NAME:TAG
# 容器启动
docker start CONTAINER_ID/CONTAINER_NAME
# 容器删除
# step 1: 查看容器是否在运行
docker ps -a
# step 2: 如果容器运行,kill 正在运行的(可以同时kill 多个正在运行的容器)
docker container kill CONTAINER_ID
# step 3: 删除容器
docker rm CONTAINER_ID/CONTAINER_NAME
# 1. 根据镜像创建容器,并进入容器
# e1abc**** 是 docker images 查询到的ImageID
docker run -it e1abc**** /bin/bash
# 2. 退出容器
exit
# 3. 后台运行容器
# -e, --env: 指定环境变量
# -d,--detach 表示后台运行容器
# --name 用于指定容器命名 apache
# --network host 容器可以访问外网
# -i 表示以交互模式运行容器
# -t 分配一个伪终端,即命令行,通常-it 组合来使用
# -p,--publish 指定映射端口,将主机端口映射到容器内端口,宿主端口:容器内部端口
# -v,--volume 指定挂载主机目录到容器目录,默认rm 读写模式,ro 只读模式。宿主目录:容器内部目录,常用来将配置文件或者是数据文件放在宿主机器上。
# --privileged:指定容器是否为特权容器,特权容器拥有所有的权限,默认为 false
# docker run --name 容器名 -i -t -p 主机端口:容器端口 -d -v 主机目录: 容器目录:ro 镜像ID/镜像名

docker run -d --name apache e1abc****
# 4. 进入后台运行容器
docker exec -it apache /bin/bash
# 5. 查看容器ID
docker ps
# -a 查看所有容器(运行中、未运行)
# -q 只查询容器ID

# 6. 容器打包成镜像
# 命令参数:docker commit [-m="描述信息" -a="作者"] <容器ID或容器名> [<仓库名>[:<标签>]]
docker commit containerID/containerName repository:tag
# 7. 测试:
docker commit 1c98ec1f51cb apache:tag_id
# 运行容器并将宿主机的8080端口映射到容器里去
docker run -d -p 8080:80 apache:tag_id

7. 制作 Docker 镜像

7.1 准备 Dockerfile 内容

vi Dockerfile
# 添加内容
"""
#声明基础镜像来源
FROM apachephp:v1
#声明镜像拥有者
MAINTAINER DTSTACK
#RUN后面接容器运行前需要执行的命令,由于Dockerfile文件不能超过127行,因此当命令较多时建议写到脚本中执行
RUN mkdir /dtstact
#开机启动命令,此处最后一个命令需要是可在前台持续执行的命令,否则容器后台运行时会因为命令执行完而退出。
ENTRYPOINT ping www.aliyun.com
"""

7.2 构建镜像

# . 是Dockerfile 文件路径
docker build -t webcentos8:v1 .
# 查看是否创建成功
docker images

7.3 运行容器并查看

# 后台运行容器
docker run -d webcentos8:v1
# 查看当前运行容器
docker ps
# 查看所有容器,(包括未运行的)
docker ps -a
# 查看所有容器,(各字段不省略,命令完整)
docker ps -a --no-trunc
# 根据容器id或name 查看对应日志排错
docker logs CONTAINER ID/NAME

7.4 制作镜像

# commit参数后添加容器ID和构建新镜像的名称和版本号。
docker commit fb2844b6**** dtstackweb:v1
# 列出本地(已下载的和本地创建的)镜像
docker images

7.5 镜像推送至远程仓库

# 默认推送到Docker Hub。
# 需要先登录Docker,为镜像绑定标签,将镜像命名为 `Docker用户名/镜像名:标签`的格式。最终完成推送。
# 执行后输入镜像仓库密码
docker login --username=dtstack_plus registry.cn-shanghai.aliyuncs.com
docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/dtstack123/test:[标签]
docker push registry.cn-shanghai.aliyuncs.com/dtstack123/test:[标签]
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值