CentOS 8 安装 Docker 以及常用命令实例

简单粗暴的安装

学习任何一个新技术,我都推荐在虚拟机里面去操作,毕竟环境干净搞完蛋不影响原来的操作系统。

依赖

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

添加 Docker 源

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装

sudo yum install docker-ce docker-ce-cli containerd.io --nobest

启动 Docker CE

sudo systemctl enable docker
sudo systemctl start docker

建立用户组

一般我们不会直接用root这个大权限的用户来操作,一般需要建立一个组加入docker组:

sudo groupadd docker

将当前用户加入 docker

sudo usermod -aG docker $USER

忒出当前客户端重新登录,进行下面的测试

Docker 镜像

由于某些原因,我们访问外网很慢,甚至是无法访问,好在有大厂这个镜像,所以赶紧换之。

新建一个配置文件/etc/docker/daemon.json

vi /etc/docker/daemon.json

输入以下内容:

{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://hub-mirror.c.163.com"
  ]
}

改完一定要重启!改完一定要重启!改完一定要重启!

sudo systemctl daemon-reload
sudo systemctl restart docker

测试 Docker 是否安装成功

执行以下命令:

docker run hello-world

输出:

Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/
For more examples and ideas, visit:
 https://docs.docker.com/get-started/

看到这个就证明 docker 已经 OJBK 了。

Docker 搭建 Swoole PHP 开发环境

我选择的是一个官方源 php:7.4-cli ,里面扩展还不是很全,但是后期可以通过 docker-php-ext-install 进行安装。

docker run -dit --name myswoole php:7.4-cli bash

这里我们来解析下相关的命令

  • run 运行一个容器
  • -d 让 docker 进入后台运行
  • -t 终端
  • -i 交互式操作
  • –name 将这个容器命名为 myswoole,这里的命名自行定义就好了
  • php:7.4-cli 这里是我选择的源
  • bash 这里表时交互使用的 shell

输入这个命令后,你会看到一段 hash ,然后就是没有任何反应了。其实这里容器已经启动了,速度真的是杠杠的,我们可以通过以下命令去查看这个命令。

docker ps

这个命令会列出所有正在运行的容器进程:

CONTAINER ID        IMAGE               COMMAND                  ...NAMES
90558d9a592b        php:7.4-cli         "docker-php-entrypoi…"   ...myswoole

好了,既然容器有了,我们就要进入容器通过命令行操作他了。

# 进入名为 myswoole 容器的bash
docker exec -it myswoole bash

# 进入命令行后
# 升级我们的依赖
# 默认的这个源没有vim,我会选择自己安装
# 因为Swoole需要使用到libssl-dev扩展

apt update
apt install vim libssl-dev

# 通过 pecl 安装 swoole
pecl install swoole
# 具体socket openssl http2 mysqlnd 是否安装你自己选择

# 安装完通过以下命令,获取扩展配置路径
php --ini
cd /usr/local/etc/php/conf.d/
vi swoole.ini

# 输入 extension=swoole.so
# 保存退出
# 查看已经有swoole扩展了
php -m

此时已经安装完毕,我们退出 bash 。这个容器已经改变,我们需要保存这个容器的修改。这里我们需要使用docker commit 命令。

首先我们通过docker ps命令获取运行容器列表

docker ps
CONTAINER ID        IMAGE               COMMAND                  ...NAMES
90558d9a592b        php:7.4-cli         "docker-php-entrypoi…"   ...myswoole

这里容器的hash值为90558d9a592b ,我们要保存的就是这个容器,所以需要这个 hash

# 保存这个hash值对应的容器的修改
docker commit 90558d9a592b myswoole:php7.4-cli

# 我们的 image 里面就多了 myswoole 了
docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myswoole            php7.4-cli          44a70414dc94        6 seconds ago       489MB
myphp               7.4-cli             95e2af34d266        About an hour ago   627MB
ubuntu              18.04               4e5021d210f6        5 days ago          64.2MB
php                 7.4-cli             040c7fa6ecb6        6 days ago          405MB

既然镜像已经保存,那么我们就要停止他,我们需要绑定本地的文件夹到容器里面,方便容器运行swoole程序。

docker ps
docker stop 90558d9a592b

# 这个时候我们需要调整

docker run -dit --name myswoole -p 80:3000 -v "$PWD":/usr/src/myapp -w /usr/src/myapp myswoole:php7.4-cli php index.php

命令分析:

  • -dit 表时后台运行交互终端
  • –name 命名容器名称为 myswoole
  • -p 80 端口和容器的 3000 端口绑定
  • -v 映射本地当前工作目录到容器的 /usr/src/myapp 目录中
  • -w 容器内的目录路径

执行命令,这里我们会发现报错了

docker: Error response from daemon: Conflict. The container name "/myswoole" is already in use by container "90558d9a592bddb6e94288b2ae4297448fb3094509696290d36fe6d1e268c4ce". You have to remove (or rename) that container to be able to reuse that name.

See 'docker run --help'.

提示我们这个容器已经存在相同的名称了,不慌简单粗暴干掉他们就好了。

docker ps -a
# 输出
CONTAINER ID        IMAGE                 COMMAND                  ...NAMES
90558d9a592b        php:7.4-cli           "docker-php-entrypoi…"   ...myswoole

# 开干
docker rm 90558d9a592b

# 再次执行命令
docker run -dit --name myswoole -p 80:3000 -v "$PWD":/usr/src/myapp -w /usr/src/myapp myswoole:php7.4-cli php index.php

在容器绑定的 “$PWD” 目录下创建一个index.php

<?php
$http = new Swoole\Http\Server("0.0.0.0", 3000);
$http->on('request', function ($request, $response) {
    $response->header("Content-Type", "text/html; charset=utf-8");
    $response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
});
$http->start();

在容器中执行 php index.php,然后我访问 本机地址的 80 端口。输出成功。这里只是单个程序的 Docker 学习,还有组合后面抽时间写。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!