Docker简介和实验环境搭建

Docker最初是dotCloud公司的一个内部项目,在当时由于其想法新颖,具有技术前瞻性,Docker开源之后引起了广泛的讨论和关注。总的来说,Docker是一种虚拟化方式,和传统的VMWare等虚拟机不同,Docker应用进程直接运行于宿主机的内核,容器内不存在硬件虚拟,因此Docker和虚拟机相比更加轻量级。

我们可以这样理解:

  • 运行中的虚拟机:虚拟硬件并在其上安装一个完整的操作系统,软件层面和真实主机完全一致
  • 运行中的Docker容器:真实主机里的一个附带了完整运行时的进程,并且它运行在隔离环境中

相比虚拟机,Docker利用系统资源更加高效,启动更快,便于持续交付、部署和迁移。

Docker的用途

个人认为Docker在两个方面特别好用:

  1. 容器化部署,结合k8s等容器编排工具,取代虚拟机部署方式
  2. 快速搭建开发环境所需的MySQL、Redis、MQ等组件,此类组件都有制作好的镜像,直接拉取运行,十分方便

Docker的基本概念

镜像:Docker镜像是一个特殊的文件系统,提供运行于容器的程序、库、资源、配置文件、运行时参数等,不包含任何动态数据。

容器:镜像是静态定义的,容器就是镜像运行时的实体,容器的实质是运行在一个隔离环境里的进程。

仓库:Docker仓库类似Nexus这种包管理服务,用于集中存储、分发镜像。和Maven坐标类似,Docker镜像名使用<仓库名>/<软件名>:<标签>的形式定义,仓库名默认为docker.io,默认标签为latest。最常用的公开Docker镜像仓库是DockerHub,也是我们拉取镜像时的默认值,此外我们也可以使用Harbor等软件搭建私有的Docker仓库。

Linux下Docker环境搭建

注意:这里我们采用UbuntuServer 22.04进行Docker实验环境的搭建,根据发行版不同、版本不同,安装方式可能有区别,官方文档写的非常详细,这里仅供参考。

首先我们要知道的是,Docker分为Docker CE(社区版)和Docker EE,这里我们采用社区版,安装可以参考官网文档:https://docs.docker.com/engine/install/ubuntu/

官网提供了三种安装方式:

  1. 使用APT源安装
  2. 手动下载deb包安装
  3. 直接执行安装脚本

这里我们选用第一种方式。

确认安装前置工具:

sudo apt-get install ca-certificates curl gnupg lsb-release

添加Docker官方GPG公钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

添加apt源:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装之后记得使用apt-get update刷新apt软件列表缓存。

安装Docker社区版:

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

安装完成后,我们就可以通过systemctl命令管理Docker服务了。

配置Docker访问代理

在日常使用Docker的时候我们可能遇到由于某些原因无法直接访问的公共仓库,如谷歌的gcr.io等。目前经过测试,DockerHub国内可以直接访问,能够正常进行拉取、推送等操作,当然,由于地区、时间等原因,以后也并非一定可以。此外,谷歌的仓库是都无法访问的,且没有国内镜像仓库。

这里最简单的解决方式是直接给docker服务配置代理,以Linux操作系统为例,我们可以执行如下操作。

cat>http-proxy.conf<<EOF
[Service]
Environment="HTTP_PROXY=http://192.168.1.103:10809"
Environment="HTTPS_PROXY=http://192.168.1.103:10809"
Environment="ALL_PROXY=socks5://192.168.1.103:10808"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF
sudo mkdir -p /lib/systemd/system/docker.service.d
sudo mv http-proxy.conf /lib/systemd/system/docker.service.d
sudo systemctl daemon-reload
sudo systemctl restart docker

这里我们在192.168.1.103地址上启动了HTTP代理和SOCKS5代理服务器,我们将配置写入/lib/systemd/system/docker.service.d/http-proxy.conf,然后重启docker服务即可,这样我们拉取镜像时就都会通过代理访问了。

使用docker用户组

默认情况下,只有root用户和docker组用户才能操作docker命令。通常情况下,root权限一般不会直接使用,因此我们可以把我们自己的用户加入docker用户组,实验环境中我们也可以这样操作,省去每条docker命令都要sudo的麻烦。

sudo groupadd docker
sudo usermod -aG docker ubuntu

添加完成后,重新登录用户即可。

注:这里ubuntu是我的登录用户名。

Windows下Docker环境搭建

我们日常开发使用的电脑大部分都是Windows系统的,那么如何在开发机上制作镜像、测试镜像呢?实际上,Docker提供了Docker Desktop软件,供我们在Windows环境下安装。Windows下Docker基于WSL2(仅支持Win10或Win11)或Hyper-V运行,这里我们推荐使用前者。

https://docs.docker.com/desktop/windows/install/

该软件使用非常简单,安装后会自动帮我们开启系统的WSL2功能以及其他设置,安装完成后就可以在命令行中使用docker命令了。

至于Windows操作系统下如何配置代理访问镜像仓库,我们直接在Docker Desktop的设置界面中配置代理即可,这里就不展开介绍了。

建议:Windows下的Docker用于开发环境镜像部署、镜像制作以及镜像测试是非常合适的,但用于生产环境提供服务是不靠谱的。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap