Docker最初是dotCloud公司的一个内部项目,在当时由于其想法新颖,具有技术前瞻性,Docker开源之后引起了广泛的讨论和关注。总的来说,Docker是一种虚拟化方式,和传统的VMWare等虚拟机不同,Docker应用进程直接运行于宿主机的内核,容器内不存在硬件虚拟,因此Docker和虚拟机相比更加轻量级。
我们可以这样理解:
相比虚拟机,Docker利用系统资源更加高效,启动更快,便于持续交付、部署和迁移。
个人认为Docker在两个方面特别好用:
镜像:Docker镜像是一个特殊的文件系统,提供运行于容器的程序、库、资源、配置文件、运行时参数等,不包含任何动态数据。
容器:镜像是静态定义的,容器就是镜像运行时的实体,容器的实质是运行在一个隔离环境里的进程。
仓库:Docker仓库类似Nexus这种包管理服务,用于集中存储、分发镜像。和Maven坐标类似,Docker镜像名使用<仓库名>/<软件名>:<标签>
的形式定义,仓库名默认为docker.io
,默认标签为latest
。最常用的公开Docker镜像仓库是DockerHub,也是我们拉取镜像时的默认值,此外我们也可以使用Harbor等软件搭建私有的Docker仓库。
注意:这里我们采用UbuntuServer 22.04进行Docker实验环境的搭建,根据发行版不同、版本不同,安装方式可能有区别,官方文档写的非常详细,这里仅供参考。
首先我们要知道的是,Docker分为Docker CE(社区版)和Docker EE,这里我们采用社区版,安装可以参考官网文档:https://docs.docker.com/engine/install/ubuntu/
官网提供了三种安装方式:
这里我们选用第一种方式。
确认安装前置工具:
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的时候我们可能遇到由于某些原因无法直接访问的公共仓库,如谷歌的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服务即可,这样我们拉取镜像时就都会通过代理访问了。
默认情况下,只有root
用户和docker
组用户才能操作docker
命令。通常情况下,root
权限一般不会直接使用,因此我们可以把我们自己的用户加入docker
用户组,实验环境中我们也可以这样操作,省去每条docker
命令都要sudo
的麻烦。
sudo groupadd docker
sudo usermod -aG docker ubuntu
添加完成后,重新登录用户即可。
注:这里ubuntu
是我的登录用户名。
我们日常开发使用的电脑大部分都是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用于开发环境镜像部署、镜像制作以及镜像测试是非常合适的,但用于生产环境提供服务是不靠谱的。