1. docker container run
2. docker run
-> docker container run [옵션] 이미지명[:태그명][인수]
<호스트 포트>:<컨테이너 포트>
<IP 주소>:<호스트 포트>:<컨테이너 포트>
호스트에 네트워크 인터페이스가 여러 개 이거나 IP주소가 여러 개 일 때 사용.<IP 주소>::<컨테이너 포트>
호스트 포트를 설정하지 않으면 호스트의 포트 번호가 무작위로 설정<컨테이너 포트>
컨테이너 포트만 설정하면 호스트의 포트 번호가 무작위로 설정.<컨테이너 이름>:<별칭>
형식docker run -it nginx
docker run -it -p 8080:80 nginx
docker build <옵션> <Dockerfile 경로>
<저장소 이름>/<이미지 이름>:<태그>
형식docker stop <컨테이너 ID>
docker kill <컨테이너 ID>
참고 예제 :: docs.docker.com
//docker-compose.yml = .yaml (Dos 시절 확장자를 3자로 제한하던 시절이 있다고 한다. 이 때 사용하기 위해 yaml 확장자를 yml으로 줄여서 사용)
version: "3" # docker-compose version 명시
services: # 서비스 정의
db: # Container
image: mysql:5.7 # Container 올릴 때 사용할 image
volumes: # 어디에 설치?
- db_data:/var/lib/mysql
restart: always # Container 종료 전까지 항상 재시작
environment: # 환경변수
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on: # Container 간 종속 설정
- db
image: wordpress:latest
volumes:
- wordpress_data:/var/www/html
ports: # 포트 설정
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
wordpress_data: {}
#
은 주석key:
key: value
key: value
# 또는
key: {
key: value,
key: value
}
key:
- item
- item
# 또는
key: [
item, item
]
key
와 value
사이에 반드시 빈칸이 필요하다.# error (not key-value, string)
key:value
# ok
key: value
RACK_ENV=development
docker-compose up
명령어를 실행 -> 컨테이너들을 생성하고 시작할 수 있다.+) 데몬 환경?
docker ps
로 컨테이너 리스트들을 볼 수 있다.docker exec -it <컨테이너 ID> /bin/bash
명령어를 사용, <컨테이너 ID> 인 컨테이너의 bash쉘을 실행시킴으로써 접근1.docker-compose exec mariadb /bin/bash
명령어를 사용, 서비스명이 mariadb인 컨테이너의 bash쉘을 실행시킴으로써 접근.
docker-compose.yml파일이 존재하는 곳에서만 위 명령어로 실행할 수 있다.
services:
mariadb: #services 명
image: debian:buster
docker-compose exec mariadb /bin/bash
root@0ba436eccbc5:/#
root@0ba436eccbc5:# apt-get update -y && //패키지 정보 업데이트
apt-get upgrade -y && // 설치된 패키지 업그레이드
apt-get -y install mariadb-server // mariadb-server 설치
root@0ba436eccbc5:# apt-get install -y vim // vim 설치
root@0ba436eccbc5:# vim /etc/mysql/mariadb.conf.d/50-server.cnf // vim을 이용해 .cnf파일 수정
root@0ba436eccbc5:# service mysql start [ ok ] Starting MariaDB database server: mysqld.
root@0ba436eccbc5:# mysql
MariaDB [(none)]> CREATE DATABASE wordpress_db;
1. CREATE USER 'yejsong'@'%' IDENTIFIED BY 'password';
2. GRANT ALL ON wordpress_db.* TO 'yejsong'@'%';
3. FLUSH PRIVILEGES;
FLUSH PRIVILEGES
라는 명령어를 입력한다. 이 명령어의 뜻은 현재 사용중인 mysql의 캐시를 지우고 새로운 설정을 적용하기 위해 사용. (이 명령어를 사용하려는 사용자는 reload 권한을 가지고 있어야한다.)MariaDB [(none)]> exit
Bye // mysql 서버에서 나오기.
root@0ba436eccbc5:# hostname -i
172.25.0.3 // mariadb 컨테이너의 ip주소 확인. (실습환경에 따라 다름)
root@0ba436eccbc5:# exit // mariadb컨테이너 빠져나오기
docker-compose exec wordpress /bin/bash // wordpress 컨테이너 접속
root@487d0433b6c9:/# apt-get update -y &&
apt-get upgrade -y &&
apt-get -y install mariadb-client
root@8b41a90ef8e8:/# mysql -u 유저_이름 -ppassword -h mariadb_컨테이너_ip주소
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 40
Server version: 10.3.27-MariaDB-0+deb10u1 Debian 10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
$ docker-compose exec wordpress /bin/bash
root@8b41a90ef8e8:/# apt-get update -y &&
apt-get upgrade -y &&
apt-get -y install php7.3 php-fpm php-cli wget curl php-mysql php-mbstring php-xml sendmail vim
CGI?
로그인과 게시글 등록을 하기위해서는 동적인 페이지 구현이 필요하다.
또 동적인 페이지를 구현하기위해서는 웹서버 이외의 외부 프로그램에서 처리하는 방법을 사용한다. 웹서버에서 요청을 받아 그 요청을 외부 프로그램에 넘겨주면, 외부 프로그램은 프로그램 파일을 읽어 html로 반환하는 단계를 거치게 된다. 이것을 CGI 라고 한다.
1. wget https://wordpress.org/latest.tar.gz &&
2. tar -xvf latest.tar.gz &&
3. mv /wordpress/* /var/www/html/ &&
4. chown -R www-data:www-data /var/www/html &&
5. rm -r /wordpress latest.tar.gz
tar --help
로 확인 가능+) 4번 과정은 뭐하는 과정일까,,,?
root@8b41a90ef8e8:/# ls -l /var/www/html/
total 212
<어쩌고 저쩌고>
root@8b41a90ef8e8:/# mv /var/www/html/wp-config-sample.php /var/www/html/wp-config.php
wp-config-sample.php 파일을 wp-config.php로 변경
root@8b41a90ef8e8:/# vim /var/www/html/wp-config.php
wp-config.php 수정
+) 수정하는 과정 사진 필요
root@8b41a90ef8e8:/# vim /etc/php/7.3/fpm/pool.d/www.conf
php fpm을 실행시키기 전 외부에서 php fpm서비스에 접속할 수 있게 해주어야 한다.
www.conf 파일의 listen을 0.0.0.0:9000으로 수정&저장.
service php7.3-fpm start
root@8b41a90ef8e8:/# hostname -i
wordpress_컨테이너_주소
wordpress컨테이너 주소 = nginx에서 php-fpm서버에 접근할 때 필요함.
$ docker-compose exec nginx /bin/bash
root@3652dd165a94:/# apt-get update -y &&
apt-get upgrade -y &&
apt-get -y install nginx openssl vim
root@3652dd165a94:/# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -subj "/C=KR/ST=Seoul/L=Seoul/O=42Seoul/OU=Song/CN=localhost" -keyout /etc/ssl/private/server_pkey.pem -out /etc/ssl/certs/server.crt
root@3652dd165a94:/# vim /etc/nginx/sites-available/default
server {
listen 443 ssl;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_certificate /etc/ssl/certs/server.crt;
ssl_certificate_key /etc/ssl/private/server_pkey.pem;
root /var/www/html;
index index.php index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
fastcgi_pass wordpress_컨테이너_주소:9000;
}
}
+) 파일에 대해 공부하기
root@3652dd165a94:/# service nginx start
[ ok ] Starting nginx: nginx.
https://127.0.0.1로 접근하면 된다.
크롬 브라우저로 접근이 안된다면, 빈 곳을 클릭 후 thisisunsafe라고 입력하면 된다.
https://127.0.0.1/index.php로 접근하면 설치 페이지로 리다이렉션