簡單粗暴的安裝
學習任何一個新技術,我都推薦在虛擬機器裡面去操作,畢竟環境乾淨搞完蛋不影響原來的作業系統。
依賴
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 協議》,轉載必須註明作者和本文連結