0
0

More than 1 year has passed since last update.

ただただ初心者がdockerを使ってみるだけ

Posted at

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

ブラウザから接続してみると、とりあえず接続できてそう!
image.png

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# 

完了!
こっちは書き換えるだけだから、簡単でした。
image.png

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

見れた!!!
image.png

まとめ

何も考えずにドキュメントに書いてあることをそのままやると痛い目に合うということを見に染みて感じました。
参考サイトはあくまでも参考サイトということですね。
振り返ってみると大したことやってないのに、5時間近く経っていた。。。技術って楽しいけど難しいね。
次は、コンテナ間の通信とかに挑戦してみたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0