Docker で cenots7 上で nginx を起動
作業ディレクトリ
/Users/#{user名}/docker_centos_project
ファイル構成
- Dockerfile
- docker-compose.yml
docker-compose.yml
version: '3'
services:
web_server:
build: "./"
ports:
- "8080:80"
# tty: true
# stdin_open: true
privileged: true
command: /sbin/init
networks:
app_net:
ipv4_address: 172.16.238.2
networks:
app_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.16.238.0/24
-
web-server
という名でカレントディレクトリのDockerfile
を起動。 - ポートフォワードの設定は、ホストの
8080
番を起動するコンテナの80
番ポートを参照させる -
tty
: 疑似ターミナル (pseudo-TTY) を割り当て。ttyを確保。/bin/bashなどでコンテナを操作する際に指定。 -
stdin_open
: コンテナの STDIN にアタッチ。コンテナの標準入力を開く。/bin/bashなどでコンテナーを操作する際に指定 -
privileged
: 特権モードを指定してコンテナ作成(問題がある模様・・・参照) -
command
: コンテナを起動して最初に動かすコマンド - ipアドレスを固定するために
networks
を指定しておく
※ デタッチドモードで起動したいが、docker-compose
でのやり方がわからない
※ systemctl
を使うために特権モードで起動するが問題があるようなので別の方法を探る
Dockerfile
FROM centos:7
RUN touch /etc/yum.repos.d/nginx.repo \
&& echo -e "[nginx]\nname=nginx repo\nbaseurl=http://nginx.org/packages/centos/7/\$basearch/\ngpgcheck=0\nenabled=1" > /etc/yum.repos.d/nginx.repo \
&& yum -y install nginx \
&& yum -y install openssh-server \
&& sed -i -e "s/PermitRootLogin yes/PermitRootLogin yes\nPermitRootLogin no/g" /etc/ssh/sshd_config
-
centos7
のイメージからコンテナ作成 -
nginx
をインストールするため/etc/yum.repos.d/nginx.repo
を作成 - ファイルの中身に記述する。
echo
コマンドを使って>
でファイルに渡す。改行を反映させるために-e
オプションを渡す。$はエスケープしなければならない。 -
yum -y install nginx
でnginx
をインストール -
yum -y install openssh-server
でopenssh-server
をインストール -
sed
を用いてssh
のログイン設定ファイルを変更
起動コマンド
$ docker-compose up -d
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
39dd5320ba92 docker_centos_project_web_server "/sbin/init" 17 hours ago Up 17 hours 0.0.0.0:8080->80/tcp docker_centos_project_web_server_1
$ docker exec -it docker_centos_project_web_server_1 bash
-
docker-compose up
: コンテナを作成し起動。オプションで-d
をつけることでバックグラウンドで実行することがでる。 -
docker ps
: 現在起動中のコンテナを確認 -
docker exec
: コンテナに入る。オプションとして-i
、-t
を渡し、bash
でコンテナ操作するための準備をし、最後にコンテナ起動後に最初に動かすコマンドとしてbash
を指定
コンテナに入った後
# systemctl start nginx
# exit
ホスト側から nginx 起動を確認
ブラウザで http://localhost:8080/ で確認