例說圖解TCP/IP協議族--HTTP篇(-)搭建HTTP服務器Apache【docker版】

    本文所有的命令都是在宿主機上執行,不需要進入到容器,這也就是docker相對於虛機的優勢之一。

 

1 在宿主機上安裝docker engine

    本文宿主機爲ubuntu 18.04,直接執行命令

wenca@wenca-node1:~$ sudo snap install docker
wenca@wenca-node1:~$ sudo snap connect docker:home :home

    查看docker服務狀態,執行以下命令

wenca@wenca-node1:~$ sudo snap services

Service         Startup  Current  Notes
docker.dockerd  enabled  active   -

    而不是以下命令,因爲docker是由snap安裝的。

wenca@wenca-node1:~$ sudo systemctl status docker

 

2 修改權限,讓普通用戶可以執行docker cli

wenca@wenca-node1:~$ ls -l /var/run/docker.sock 

srw-rw---- 1 root docker 0 Aug  5 02:23 /var/run/docker.sock

    確保owner爲root,group爲docker,否則可以通過以下命令修改

wenca@wenca-node1:~$ sudo chown root:docker /var/run/docker.sock

    增加當前登陸的賬號到docker組

wenca@wenca-node1:~$ sudo adduser $USER docker

The user `wenca' is already a member of `docker'.

    退出當前會話,重新登陸,然後普通用戶就可以執行docker命令,不需要增加sudo。

 

3 獲取官方apache鏡像

    執行命令,獲取鏡像

wenca@wenca-node1:~$ docker pull httpd:latest

latest: Pulling from library/httpd
Digest: sha256:dc4c86bc90593c6e4c5b06872a7a363fc7d4eec99c5d6bfac881f7371adcb2c4
Status: Image is up to date for httpd:latest

    查看獲取鏡像列表 

wenca@wenca-node1:~$ docker image ls

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               latest              ee39f68eb241        3 weeks ago         154MB

 

4 拷貝apache鏡像的相關文件到宿主機

    在宿主機上新建一個空目錄,並切換到新建的空目錄

wenca@wenca-node1:~$ mkdir -p Servers/apache
wenca@wenca-node1:~$ cd Servers/apache

    啓動一個apache容器,在後臺運行

wenca@wenca-node1:~/Servers/apache$ docker container run --name apache_temp -d httpd:latest

3c137b6b3c647fa06986caa9762842bcae19fe7fe2362be02109e5343d26cc58
wenca@wenca-node1:~/Servers/apache$ docker container ls -a

CONTAINER ID  IMAGE         COMMAND             CREATED         STATUS        PORTS  NAMES
3c137b6b3c64  httpd:latest  "httpd-foreground"  40 seconds ago  Up 38 seconds 80/tcp apache_temp

    複製容器裏的相關文件和文件夾到宿主機

wenca@wenca-node1:~/Servers/apache$ docker cp apache_temp:/usr/local/apache2 ./

    查看來自容器裏的文件和文件夾

wenca@wenca-node1:~/Servers/apache$ ls

bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  modules

    刪除該容器

wenca@wenca-node1:~/Servers/apache$ docker container rm -f apache_temp

apache_temp

 

5 創建docker-compose.yml文件,運行apache容器

    在當前路徑下新建docker-compose.yml

wenca@wenca-node1:~/Servers/apache$ ls -l
total 44
drwxr-xr-x 2 wenca wenca 4096 Jul 10 15:22 bin
drwxr-xr-x 2 wenca wenca 4096 Jul 10 15:22 build
drwxr-xr-x 2 wenca wenca 4096 Jul 10 15:22 cgi-bin
drwxr-xr-x 4 wenca wenca 4096 Aug  7 02:06 conf
-rw-rw-r-- 1 wenca wenca  349 Aug  7 02:04 docker-compose.yml
drwxr-xr-x 3 wenca wenca 4096 Jul 10 15:22 error
drwxr-xr-x 2 wenca wenca 4096 Aug  7 02:07 htdocs
drwxr-xr-x 3 wenca wenca 4096 Jul 10 15:22 icons
drwxr-xr-x 2 wenca wenca 4096 Jul 10 15:22 include
drwxr-xr-x 2 wenca wenca 4096 Aug  7 02:04 logs
drwxr-xr-x 2 wenca wenca 4096 Jul 10 15:22 modules

    docker-compose.yml文件內容是

version: "3.7"
  
services:
        apache_testing:
                image: httpd:latest
                container_name: apache_testing
                ports:
                        - 80:80
                        - 443:443
                volumes:
                        - $PWD:/usr/local/apache2:rw
                command: apachectl -D FOREGROUND

  根據docker-compose.yml,啓動apache容器

wenca@wenca-node1:~/Servers/apache$ docker-compose -f docker-compose.yml up -d

Creating apache_testing ... done
wenca@wenca-node1:~/Servers/apache$ docker container ls -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES
0613d6822448        httpd:latest        "apachectl -D FOREGR…"   17 seconds ago      Up 14 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   apache_testing

    可以在宿主機上直接更改conf/目錄下的httpd.conf、httpd-ssl.conf等配置文件,完成自定義配置,然後再執行一遍以下命令,既可以讓配置生效。

wenca@wenca-node1:~/Servers/apache$ docker-compose -f docker-compose.yml up -d

apache_testing is up-to-date

  直接運行上面命令有時候會有問題,建議先刪除老的容器,再執行以上命令。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章