Docker入门一篇就够了!

1 Docker 简介

       Docker 是一个开源的应用容器引擎,基于Go语言并遵从 Apache2.0 协议开源。

       Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

1.1 Docker的优点

1.1.1 快速、一致的交付应用程序

       Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:

  1. 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
  2. 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
  3. 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
  4. 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

1.1.2 响应式部署和扩展

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

1.1.3 轻便高效

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

1.2 Docker架构

1.2.1 Image 镜像

       Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

1.2.2 Container 容器

       镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

1.2.3 Repository 仓库

       仓库可看成一个代码控制中心,用来保存镜像。类似于Maven的仓库。

2 Docker安装

2.1 CentOS安装

2.1.1 一键安装

# 官方脚本(使用阿里镜像):
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

# 国内daocloud一键安装:
curl -sSL https://get.daocloud.io/docker | sh

2.1.2 手动安装

# 如果有旧版本,先卸载
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

# 设置yum阿里镜像
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装,先更新yum仓库
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

# 安装,如果提示您接受 GPG 密钥,请选是。
sudo yum install docker-ce docker-ce-cli containerd.io

# 启动
sudo systemctl start docker

# 测试是否可用
sudo docker run hello-world

2.2 Ubuntu安装

2.2.1 一键安装

# 官方脚本(使用阿里镜像):
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

# 国内daocloud一键安装:
curl -sSL https://get.daocloud.io/docker | sh

2.2.2 手动安装

# 如果有旧版本,先卸载
sudo apt-get remove docker docker-engine docker.io containerd runc

# 更新apt包索引
sudo apt-get update

# 安装apt依赖包
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

# 设置稳定版仓库
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) \
  stable"

# 更新apt包索引
sudo apt-get update

# 安装最新版本的 Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 测试是否可用
sudo docker run hello-world

2.3 阿里镜像加速

3 Docker常用命令

3.1 Image 相关命令

3.1.1 搜索镜像

        也可以从官方仓库网页搜:https://hub.docker.com/

# 返回值说明:
#	NAME: 镜像仓库源的名称
#	DESCRIPTION: 镜像的描述
#	OFFICIAL: 是否 docker 官方发布
#	stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
#	AUTOMATED: 自动构建。
docker search ubuntu

在这里插入图片描述

3.1.2 拉取镜像

# 下载镜像
docker pull ubuntu:13.10

# 查看镜像信息
## 返回值说明:
##	REPOSITORY:镜像的仓库源
##	TAG:镜像的标签
##	IMAGE ID:镜像ID
##	REATED:镜像创建时间
##	SIZE:镜像大小
docker images

在这里插入图片描述

3.1.3 运行镜像

      在Docker中,有两种方式可以指定某个镜像:

  • REPOSITORY:TAG
  • IMAGE ID,当引用IMAGE ID时可以使用简写,即只输入IMAGE ID前两位数即可。如果存在多个镜像简写的值一致,则使用简写时会报错。
# -t: 终端
# -i: 交互式操作
# -d: 后台运行,多个参数可以在一起写: -itd
# -p: 端口映射,80:8080表示宿主机的80端口映射容器的8080端口。
#	  即访问宿主机80端口相当于访问容器8080端口。该参数可重复使用进行多端口映射。
# --name , test为自定义容器名
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
#			 如果用/bin/bash报错,则用/bin/sh
docker run -t -i -d --name test openjdk:11 /bin/bash 

# 以下命令效果相同

# 这里的 f5 就是这个镜像的IMAGE ID:f5de33dc9079的简写
docker run -itd f5 /bin/bash 
docker run -tid f5de33dc9079 /bin/bash 

3.1.4 删除镜像

docker rmi openjdk

3.1.5 重命名镜像

        如果下载的镜像名称太长,我们可以通过docker tag命令重新给镜像打个标签(有重命名的效果,但不是真正的重命名)。
        docker tag命令本文先不进行详细介绍了,有兴趣的小伙伴可以访问文章开头的官网或者菜鸟教程学习哦~

docker tag openjdk:11 myjdk:1

在这里插入图片描述
 

3.2 Container 相关命令

      在Docker中,我们有两种方式可以指定某个容器:

  • NAME,容器名,启动镜像时指定。
  • IMAGE ID,当引用IMAGE ID时可以使用简写,即只输入IMAGE ID前两位数即可。如果存在多个容器简写的值一致,则使用简写时会报错。

3.2.1 查看容器

# 默认只查看运行中的
docker ps

# 查看所有
docker ps -a

在这里插入图片描述

3.2.2 启动/停止容器

# 启动
docker start test

# 重启
docker restart 242480ce4d72

# 停止
docker stop 24

3.2.3 删除容器

docker rm test

3.2.4 进入容器

        进入容器就相当于进入一个Linux系统一样,只是为了让镜像更轻便,这些Linux系统的工具会非常少,只有最基础的命令,绝大部分连vi命令都没有,需要手动安装。
        而根据镜像所选的基础系统不同,安装工具也不同:
            · 基于Ubuntu系统的通过apt命令安装。
            · 基于RedHad系统的通过yum命令安装。
 
       进入容器后,如果需要退出容器,输入 exit 回车即可

# -t: 终端
# -i: 交互式操作
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
## 如果用/bin/bash报错,则用/bin/sh
docker exec -it myubuntu /bin/bash 

3.2.5 查看容器日志

       使用docker logs查看容器日志。

# -f 动态加载,即有新日志时会实时加载出来
# --tail 100 只加载最后100行
# | grep **** 搜索指定字符并输出其所在行
# > temp.txt Linux中 '>' 代表输出, '<'代表输入
#			 这里的意思就是将输出的值存入当前目录的temp.txt文件中
# 以上所有选项按需选择即可
docker logs -f --tail 100 myubuntu | grep 博主真帅 > temp.txt

3.2.6 查看容器信息

       如果需要检查容器的配置文件,尤其是当容器启动失败时,我们可以通过使用docker inspect命令查看容器信息,找到该容器在宿主机中的路径。
       在下图中,通过docker inspect myubuntu | grep Dir命令可以找到红框中的值:/var/lib/docker/overlay2/eaafdf5cb63f8180ab5e26036d6e3acc2ab518ad8ca9a0d597dd106712878557即容器所在的路径。有些容器中并没有merged目录,因此我们cd到其父目录下肯定是可以的。

# 输出`myybuntu`容器的详细信息
docker inspect myubuntu
# | grep Dir 只输出包含'Dir'字符的行
docker inspect myubuntu | grep Dir

在这里插入图片描述

3.2.7 查看容器运行情况

# 查看所有已启动的容器的资源消耗情况
docker stats

# 查看指定容器的资源消耗情况
docker stats myubuntu

# 查看指定容器的进程信息
docker top myubuntu

# 查看所有容器的进程信息
for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done

3.2.7 配置容器自启

        通过 --restart设置容器重启策略,可选值如下:

  • no,默认策略,在容器退出时不重启容器
  • on-failure,在容器非正常退出时(退出状态非0),才会重启容器
  • on-failure:3,在容器非正常退出时重启容器,最多重启3次
  • always,在容器退出时总是重启容器
  • unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
# 将名字为 myubuntu 的容器设置为开机自启(前提是docker是开机自启)
docker container update --restart=always myubuntu

3.2.8 容器和宿主机传输文件

        使用docker cp [resourcePath] [targetPath]命令实现宿主机和容器间的文件传输。
        有时候我们需要修改容器配置时,可通过这种方式替换容器配置,然后使用docker restart重启容器,在通过docker logs查看日志确定是否修改并重启成功。

# 将宿主机的/etc/mysql/my.cnf复制到 名字为mymysql的容器的/etc/mysql/conf.d/my.cnf
# 反之亦然,至于该命令是否可以实现容器和容器之间的文件传输,就留给小伙伴们自行发掘哦~
docker cp /etc/mysql/my.cnf mymysql:/etc/mysql/conf.d/my.cnf

4 Docker 安装常见应用

4.1 Docker 安装 Mysql

        官网仓库:https://hub.docker.com/_/mysql?tab=tags
        需要提一下的是,如果是有一定数据量或压力的生产环境,最好还是不要用Docker运行Mysql,毕竟中间有个Docker,所以性能方面肯定是没有直接安装在服务器上的好。在本地或者测试环境就无所谓了。

# 不指定TAG时,默认下载最新版
docker pull mysql

# 指定标签
docker pull mysql:8.0.20

# 搜索可用版本
docker search mysql

# 运行镜像
# -e 自定义参数, 这些参数在上述官网中有详细描述
# MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
docker run -itd --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

# 查看是否运行成功
docker ps

4.2 Docker 安装 Redis

         安装步骤与安装Mysql大同小异

# 不指定TAG时,默认下载最新版
docker pull redis

# 指定标签
docker pull redis:6.0.5

# 搜索可用版本
docker search redis

# 运行镜像
docker run -itd --name redis6 -p 6379:6379 redis

# 查看是否运行成功
docker ps

5 总结

         本文简单介绍了Docker的基本使用,后面有时间再整理DockerfileDocker-Compose相关的知识点。
         相对于文章开头对Docker架构/优点等文字性的描述,相信大家在实际操作后对Docker会有更深刻的认识。
         如果本文对你有所帮助,记得双击么么哒~

猜你喜欢

转载自blog.csdn.net/qq_38688267/article/details/106714217
今日推荐