dockerの練習として
コンテナにapacheをインストールして、外部公開してみたい
dockerで使うコマンドは、限定公開記事にしてまとめてみる
https://qiita.com/koko_kotsu/private/ef2ec44cd220787c86e9
環境
- Oracle Linux 8.7
- CPU - Arm
- firewalld - disable
- locale - ja_JP.UTF-8
- timezone - Asia/Tokyo
- SELINUX - disable
まずはDockerをインストール
ローカルPCではなくサーバにDockerをインストールすればきっと簡単に公開できるはずなので
サーバを立ててDockerをインストールする
インストール手順はこちらの記事を参考にしました。
https://zenn.dev/kyami/articles/15185192395cb7
dockerのリポジトリを取得
# dnf config-manager --add-repo=https://download.docker.com/linux/centos/d
ocker-ce.repo
dockerをインストール
# dnf install -y docker-ce --nobest
dockerを起動
# systemctl start docker
dockerの情報
とりあえず正常にインストールできたっぽい
# docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.9.1-docker)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 20.10.22
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: false
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9ba4b250366a5ddde94bb7c9d1def331423aa323
runc version: v1.1.4-0-g5fd4c4d
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 5.4.17-2136.314.6.3.el8uek.aarch64
Operating System: Oracle Linux Server 8.7
OSType: linux
Architecture: aarch64
CPUs: 2
Total Memory: 6.998GiB
Name: docker
ID: U6TX:PPKV:DFCI:GXY5:ON4C:QHCV:NEYK:MJDW:F4JA:3UDA:UDQK:PA7A
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Dockerfileを作ってみる
Dockerfileにある程度書き込んで、webを公開してみたい
Dockerfileについてはここを参考にしてみました。
https://masaki-blog.net/docker-apache-dockerfile
dockerfileを作る
まずは、見よう見まねで作ってみる
[opc@docker ~]$ cat Dockerfile
FROM httpd:2.4
RUN mkdir /usr/local/apache2/conf/include/ && echo 'Include conf/include/*.conf ' >> /usr/local/apache2/conf/httpd.conf
COPY ./conf/*.conf /usr/local/apache2/conf/include/
bulidしてみる
buildしてみたら、権限が足りなかった
[opc@docker ~]$ docker build -t test-apache ./
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=test-apache&target=&ulimits=null&version=1": dial unix /var/run/docker.sock: connect: permission denied
rootユーザにスイッチして再度実行
[root@docker ~]# docker build -t test-apache ./
Sending build context to Docker daemon 10.24kB
Step 1/3 : FROM httpd:2.4
2.4: Pulling from library/httpd
4b7f5b2a3113: Pull complete
fac45e5a15ef: Pull complete
60db67158dbf: Pull complete
b89f66e6e64a: Pull complete
ef4f55b91ed7: Pull complete
Digest: sha256:f8c7bdfa89fb4448c95856c6145359f67dd447134018247609e7a23e5c5ec03a
Status: Downloaded newer image for httpd:2.4
---> 6c064f9f5f14
Step 2/3 : RUN mkdir /usr/local/apache2/conf/include/ && echo 'Include conf/include/*.conf ' >> /usr/local/apache2/conf/httpd.conf
---> Running in f3b8734ab52b
Removing intermediate container f3b8734ab52b
---> 4f01924ecbb0
Step 3/3 : COPY ./conf/*.conf /usr/local/apache2/conf/include/
COPY failed: no source files were specified
Dockerイメージができたっぽい
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 4f01924ecbb0 30 seconds ago 139MB
httpd 2.4 6c064f9f5f14 7 days ago 139MB
コンテナを立ち上げてみる
run
コマンドで立ち上げてみる!
何やらエラーが発生
空き容量不足みたい。。。OCIのAlwaysFreeではダメなのか?
[root@docker ~]# docker run -dp 8001:80 httpd --name k-apache
Unable to find image 'httpd:latest' locally
latest: Pulling from library/httpd
Digest: sha256:f8c7bdfa89fb4448c95856c6145359f67dd447134018247609e7a23e5c5ec03a
Status: Downloaded newer image for httpd:latest
a64d57b028f45aa2093ad30b64f9be58db6c481f40e86de28aedd96ae7b7f197
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "--name": executable file not found in $PATH: unknown.
ルート領域の容量を追加して再トライ。
それでも上手くいかず。。。
/dev/mapper/ocivolume-root 36G 9.0G 27G 26% /
↓
/dev/mapper/ocivolume-root 89G 9.4G 80G 11% /
[root@docker ~]# docker run -dp 8001:80 httpd --name k-apache
f0fa0e554df3fd2b759c3db9344693c2b32a13fbd9b071be3ac04eef1f936d4e
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "--name": executable file not found in $PATH: unknown.
参考サイト様のコマンド通りに実行したら上手くいった
ただのオプションミスでした。
[root@docker ~]# docker run -dit --name my-running-app -p 8080:80 httpd
97184d8da5b44c65b8cdbef6baf4e1e6f2054aeaef9ecbe7d317865b3a155c6d
やりたかったことはこう!
端折ることはしないで正確に書いてみると、動いた!
(容量不足は関係なかった)
[root@docker ~]# docker run --name k-apache -i -t -d -p 8080:80 httpd
abe0421a464f317909fa4ad9e27d162198ebddf40e18c3ad44c0558b6db6633e
HelloWorldにしなければ
やっぱりとりあえず触る系といえばHelloworldなので、
それを出して終わりしたい。
index.htmlに書き込めばいいだけのはずなので、
Dockerfileに書く方法と直接書き込む方法の2種類を試す
直接書き込む
exec
コマンドでコンテナに接続
[root@docker ~]# docker exec -it k-apache /bin/bash
root@abe0421a464f:/usr/local/apache2#
viで書き込むだけ、と思ったらviがない
Ubuntu系っぽいので、vimをインストール
# apt-get update
# apt-get install vim
httpd.confからドキュメントルートを確認して
index.htmlを書き換え!
root@abe0421a464f:/usr/local/apache2/htdocs# pwd
/usr/local/apache2/htdocs
root@abe0421a464f:/usr/local/apache2/htdocs# vim index.html
root@abe0421a464f:/usr/local/apache2/htdocs# cat index.html
<html><body><h1>HelloWorld</h1></body></html>
root@abe0421a464f:/usr/local/apache2/htdocs#
Dockerfileをいじる
とりあえず見よう見まねで修正してみた
RUN
がきっとコンテナ内でコマンド実行って意味だと思うのでたぶん合ってる
ついでにvimもインストールしておく
FROM httpd:2.4
RUN mkdir /usr/local/apache2/conf/include/ && echo 'Include conf/include/*.conf ' >> /usr/local/apache2/conf/httpd.conf
COPY ./conf/*.conf /usr/local/apache2/conf/include/
RUN apt-get update && apt-get -y install vim
RUN mv /usr/local/apache2/htdocs/index.html /usr/local/apache2/htdocs/index.html_org && echo 'HelloWorld' > /usr/local/apache2/htdocs/index.html
新しくbuildする
しかし、エラーが発生。
初めのbuild時の内容もよくみてみたら失敗してた。3つ目のCOPYが上手くいってないみたい
[root@docker ~]# docker build -t helloworld-apache ./
Sending build context to Docker daemon 12.8kB
Step 1/5 : FROM httpd:2.4
---> 6c064f9f5f14
Step 2/5 : RUN mkdir /usr/local/apache2/conf/include/ && echo 'Include conf/include/*.conf ' >> /usr/local/apache2/conf/httpd.conf
---> Using cache
---> 4f01924ecbb0
Step 3/5 : COPY ./conf/*.conf /usr/local/apache2/conf/include/
COPY failed: no source files were specified
よくよく調べてみたらCOPY
ってローカルPCからコンテナにファイルをコピーするためのコマンドでした。
見よう見まねでやったのがいけなかった。
なので余計なRUNもCOPYも削除して、bulidする。
FROM httpd:2.4
RUN apt-get update && apt-get -y install vim
RUN mv /usr/local/apache2/htdocs/index.html /usr/local/apache2/htdocs/index.html_org && echo 'HelloWorld' > /usr/local/apache2/htdocs/index.htm
imageができた!
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
helloworld-apache latest d6a8916c3b5d 9 seconds ago 192MB
立ち上げる!
[root@docker ~]# docker run --name world -i -t -d -p 8081:80 world-apache-image
3f298b15ff32bbe8b9d43946a75a9bb4402dfe47090c7d12d2ee996d632b7ff3
まとめ
何も考えずにドキュメントに書いてあることをそのままやると痛い目に合うということを見に染みて感じました。
参考サイトはあくまでも参考サイトということですね。
振り返ってみると大したことやってないのに、5時間近く経っていた。。。技術って楽しいけど難しいね。
次は、コンテナ間の通信とかに挑戦してみたい。