CentOS 8 安裝 Docker 以及常用命令例項

Neilyozの魚不浪發表於2020-03-27

簡單粗暴的安裝

學習任何一個新技術,我都推薦在虛擬機器裡面去操作,畢竟環境乾淨搞完蛋不影響原來的作業系統。

依賴

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 協議》,轉載必須註明作者和本文連結
Neilyozの魚不浪

相關文章