Docker全方位攻略与自动化运维

介绍

Docker Registry(Docker注册中心)是一个管理Docker容器镜像存储和交付的应用程序。注册中心集中容器镜像并减少开发人员的构建时间。Docker镜像通过虚拟化保证相同的运行环境,但是构建镜像需要大量的时间投入。例如,开发人员可以从包含所有必要组件的注册中心下载压缩镜像,而不是单独安装依赖项和包来使用Docker。此外,开发人员可以使用持续集成工具,例如:Buddy自动将镜像推送到注册中心,以在生产和开发过程中无缝更新镜像。

Docker Hub是一个免费公共的注册中心,可以托管您的自定义Docker镜像,但在某些情况下您不希望您的镜像公开使用。镜像通常包含运行应用程序所需的所有代码,因此在使用专有软件时最好使用私有的注册中心。

通过本文您将学到以下的大致内容:

  • Ubuntu 22.04初始服务器设置指南
  • 如何在Ubuntu 22.04上安装和使用Docker
  • 如何在Ubuntu 22.04上安装和使用Docker Compose
  • 如何在Ubuntu 22.04上安装Nginx
  • 如何在Ubuntu 22.04上使用Let’s Encrypt安全地使用Nginx
  • 如何在Ubuntu 22.04上设置私有Docker注册中心
  • DevOps开发运维一体化与Docker完美结合

初始服务器设置

首次新建Ubuntu 22.04服务器时,您应该执行一些重要的配置步骤作为初始设置的一部分。这些步骤将提高服务器的安全性和可用性,并为您的后续操作打下坚实的基础。

登录为root

要登录到您的服务器,您需要知道服务器的公网IP地址。您还需要root用户帐户密码或密钥(如果您安装了用于身份验证的SSH密钥)。

如果当前未连接到您的服务器,请使用以下命令以root用户身份登录。将命令中您的_公网_IP部分替换为您服务器的公网IP地址:

ssh root@您的_公网_IP

接受有关主机显示的提示(如果出现)。如果您的服务器使用密码身份验证,请提供您的root密码以登录。如果您使用受密码保护的SSH密钥,您可能需要在每次会话首次使用该密钥时输入密码如果这是您第一次使用密码登录服务器,您可能还需要更改root密码。 如果收到提示,请按照说明更改密码即可。

关于root

root用户是Linux环境中具有提升权限的管理用户。由于root帐户具有更高的权限,因此不鼓励您经常使用root。root帐户可以做出非常具有破坏性的更改,即使是意外的操作也可能带来很大的破坏。

下一步是设置一个新的用户帐户,降低日常使用的权限。稍后,我们将向您展示如何在您需要时临时获得更高的权限。

新建用户

以root身份登录后,您将能够添加新的用户帐户。 将来,我们将使用这个新帐户而不是root登录。

此示例创建一个名为edal的新用户,但您应该将其替换为您喜欢的用户名:

adduser edal

您将被要求回答一些问题,首先是帐户密码。

输入一个强悍的密码,如果需要的话,填写任何附加信息。这些信息不是必需的,您可以在任何您想跳过的字段中按回车键。

授予管理员权限

现在您拥有一个具有普通帐户权限的新用户帐户。然而,您有时需要以root用户身份执行管理任务。

为了避免注销您的常规用户并重新登录root帐户,您可以为用户的常规帐户设置所谓的超级用户roo权限。这些权限将允许您的普通用户在命令前加上sudo以使用管理权限运行命令。

要将这些权限添加到您的新用户中,您需要将用户添加到sudo系统组中。在Ubuntu 22.04上,默认情况下属于sudo组的用户可以使用sudo命令。

以root身份运行此命令将您的新用户添加到sudo组中:

usermod -aG sudo edal

您现在可以在命令前键入sudo,以在以普通用户身份登录时以超级用户权限运行。

设置防火墙

Ubuntu 22.04服务器可以使用UFW防火墙来确保只允许连接到某些服务。 您可以使用此应用程序设置基本防火墙。

应用程序可以在安装时向UFW注册它们的配置文件。这些配置文件允许UFW按名称管理这些应用程序。OpenSSH,允许您连接到您的服务器的服务,有一个在UFW注册的配置文件。

您可以通过键入以下内容来检查已安装的UFW配置文件列表:

ufw app list
输出信息
Available applications:
  OpenSSH

您需要确保防火墙允许SSH连接,以便您下次可以登录到您的服务器。通过键入以下内容允许这些连接:

ufw allow OpenSSH

然后输入以下命令启用防火墙

ufw enable

输入y并按回车键继续。您可以通过键入以下内容看到仍然允许SSH连接:

ufw status
输出信息
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

防火墙当前阻止除SSH之外的所有连接。如果您安装和配置附加服务,您将需要调整防火墙设置以允许新流量进入您的服务器。

为普通用户启用外部访问

现在您已经有了日常使用的普通用户,您需要确保可以通过SSH直接连接到该帐户。

为新用户配置SSH访问取决于您服务器的根帐户是使用密码还是SSH密钥进行身份验证。

如果root账户使用密码认证

如果您使用密码登录到您的root帐户,则会为SSH启用密码身份验证。您可以通过打开一个新的终端会话并使用SSH和您的新用户名连SSH到您的新用户帐户:

sudo command_to_run

如果root账户使用SSH密钥认证

如果您使用SSH密钥登录到您的根帐户,则SSH的密码身份验证将被禁用。要使用SSH密钥以普通用户身份登录,您必须将本地公钥的副本添加到新用户的 ~/.ssh/authorized_keys 文件中。

由于您的公钥已经在服务器上根帐户的 ~/.ssh/authorized_keys 文件中,您可以使用当前会话将该文件和目录结构复制到新用户帐户。

复制具有正确所有权和权限的文件的最简单方法是使用rsync命令。此命令将复制root用户的.ssh目录、保留权限并修改文件所有者,所有这些都在一个命令中完成。确保更改相关命令以匹配您的常规用户名:

rsync命令处理以斜杠结尾与没有斜杠不同在下面使用rsync时,请确保源目录(~/.ssh)不包含尾部斜杠(检查以确保您没有使用 ~/.ssh/)。

如果您不小心在命令中添加斜杠结尾,rsync会将root帐户的 ~/.ssh 目录的内容复制到sudo用户的主目录,而不是复制整个 ~/.ssh 目录结构。 若如此文件将位于错误的位置,SSH将无法找到和使用。

rsync --archive --chown=edal:edal ~/.ssh /home/edal

现在,在你的本地机器上打开一个新的终端会话,并使对新用户名使用SSH:

ssh edal@your_server_ip

您就能使用新用户帐户连接到服务器而无需使用密码。 请记住,如果您需要以管理权限运行命令,请在命令前键入sudo,如下所示:

sudo 加上命令

每次会话首次使用sudo时(之后会定期提示),系统都会提示您输入普通用户的密码。

安装和使用Docker

安装Docker

官方Ubuntu存储仓中提供的Docker安装包可能不是最新版本。为确保获得最新版本,我们将从官方Docker存储仓安装Docker。为此,我们将添加一个新的包源,添加来自Docker的GPG密钥以确保下载有效,然后安装软件包。

首先,更新您现有的软件包列表:

sudo apt update

接下来,安装一些先决条件包,让apt通过HTTPS使用软件包:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

然后将官方Docker存储仓的GPG密钥添加到您的系统中:

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

将Docker存储仓添加到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

再次更新您现有的软件包列表,以便识别添加内容:

sudo apt update

确保您要从Docker存储仓而不是默认的Ubuntu存储仓进行安装:

apt-cache policy docker-ce

你会看到类似的输出,Docker的版本号可能不同:

docker-ce:
  Installed: 5:23.0.1-1~ubuntu.22.04~jammy
  Candidate: 5:23.0.1-1~ubuntu.22.04~jammy
  Version table:
 *** 5:23.0.1-1~ubuntu.22.04~jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
        100 /var/lib/dpkg/status
     5:23.0.0-1~ubuntu.22.04~jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
     5:20.10.23~3-0~ubuntu-jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages

请注意,docker-ce未安装,但安装候选来自Ubuntu 22.04(jammy)的Docker存储仓。

最后,安装Docker:

sudo apt install docker-ce

现在安装Docker,启动守护进程,并启用启动时启动的进程。检查它是否正在运行:

sudo systemctl status docker

输出类似于以下内容,表明该服务处于启用状态并正在运行:

● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-02-20 15:53:30 CST; 3min 29s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 1088 (dockerd)
      Tasks: 23
     Memory: 125.2M
        CPU: 3.375s
     CGroup: /system.slice/docker.service
             └─1088 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

现在安装Docker不仅可以提供Docker服务(守护进程),还可以提供docker命令行实用程序或Docker客户端。我们将在本教程后面探讨如何使用docker命令。

无Sudo执行Docker命令(选修)

默认情况下,docker命令只能由root用户或docker用户组运行,docker用户组是在Docker安装过程中自动创建。如果您尝试在不使用sudo前缀或不在docker用户组中的情况下运行docker命令,您将获得如下输出:

docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.

如果您想在运行docker命令时避免键入sudo,请将您的用户名添加到docker用户组:

sudo usermod -aG docker ${
   USER}

要应用新的组员级别,请退出服务器并重新登录,或键入以下内容:

su - ${
   USER}

系统将提示您输入用户密码以继续。

通过键入以下内容确认您的用户现在已添加到docker用户组:

groups
输出
edal sudo docker

如果您需要将用户添加到您未登录的docker用户组,请声明该用户名:

sudo usermod -aG docker 用户名

本文的其余部分以docker用户组中的用户身份运行docker命令为示例。如果您不想这样做,请在命令前加上sudo。

接下来让我们来实践docker命令。

Docker命令的运用

使用docker包括向其传递一系列选项和命令,然后是参数。语法采用以下形式:

docker [选项] [命令] [参数]

要查看所有可用的子命令,请键入:

docker

Docker版本23.0.1可用子命令的完整列表如下:

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  wait        Block until one or more containers stop, then print their exit codes

要查看特定命令可用的选项,请键入:

docker docker-subcommand --help

要查看有关Docker的系统范围信息,请使用:

docker info

让我们探索其中的一些命令。我们将从处理镜像开始。

使用Docker镜像

Docker容器通过Docker镜像构建。默认情况下,Docker从Docker Hub中提取这些镜像,这是一个由Docker项目公司管理的Docker注册中心,任何人都可以在Docker Hub上托管他们的Docker镜像,因此您需要的大多数应用程序和Linux发行版都在那里有托管的镜像。

要检查您是否可以从Docker Hub访问和下载镜像,请键入:

docker run hello-world

输出将显示Docker正常工作:

Unable to 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值