docker search httpd
docker pull httpd
컨테이너 생성
docker create --name apache2 httpd
docker ps -a
docker start 컨
이미지 세부정보
docker inspect 컨
➡️ 다음과 같이 명령하면 cmd 항목에 해당 컨테이너 실행시, 실행하는 명령(응용 프로그램)이 기재되어 있음
컨테이너 실행 후,해당 ubuntu 내로 들어가서, 터미널로 명령을 진행할 수 있음(background)
docker run -it -d --name myubuntu ubuntu
it옵션
1️⃣ docker 컨테이너에 표준 입력을 오픈해놓고,
2️⃣ pseudo tty를 만들어서 (-t옵션) 해당 표준 입력을 pseudo tty에 연결
따라서, 키보드 입력을 pseudo tty를 통해, 컨테이너의 표준 입력으로 전달할 수 있도록 함
웹서버 접속
docker run -d -p 9999:80 --name apacheweb httpd
52.79.49.196:9999 (보안그룹에서 인바운드 규칙 포트 추가. 난 9999)
바인딩
apache 웹서버 기본 설정에 의해 /usr/local/apache2/htdocs의 index.html 보여줌
docker run -d -p 9999:80 -v /home/ubuntu/2021_DEV_HTML:/usr/local/apache2/htdocs --name apacheweb2 httpd
docker run -v 호스트pc_절대경로:도커_컨테이너_절대경로 httpd
-v : 호스트pc의 특정 폴더를 docker 컨테이너의 특정 폴더로 교체 가능
docker system df
alpine : 아주 최소의 기능만 가진 image
busybox위에 httpd올려서 용량을 줄임, bash도 커서 sh씀
alpine 태그를 붙여서 경량화 된 image 제공
docker run -d -p 9999:80 -v /home/ubuntu/2021_DEV_HTML:/usr/local/apache2/htdocs --name apacheweb3 httpd:alpine
실행중인 컨테이너에 명령 실행
docker exec -it apacheweb3 /bin/sh
apacheweb3는 alpine이라서 sh
실행중인 컨테이너에 연결
docker run -it -d --name myubuntu3 ubuntu
docker attach myubuntu3
컨테이너에 연결되어, 컨테이너 내에서 쉘 프로그램을 사용하여, 명령을 내릴 수 있음
exec: 신규 명령 실행 / attach : 컨테이너 연결
모든 컨테이너 삭제
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi -f $(docker ps -a -q)
docker kill apacheweb3
정지된 컨테이너 삭제
실행중인 컨테이너 image 외의 이미지 삭제
정지된 컨테이너, 실행중인 컨테이너 이미지 외의 이미지, 볼륨, 네트워크 삭제
docker container prune
docker image prune
docker system prune
🖤 docker-compose
- 여러 컨테이너를 모아서 관리하기 위한 툴
- 웹서비스 : front, backend, db server ➡️ 각각 컨테이너로 작성, docker compose(컨테이너 관리툴)
- 더 커지면 쿠버네티스(service 더 쪼개서)
- docker-compose.yml
# Docker Compose 파일 포맷
# services 아래에 컨테이너 설정
services:
app:
# 이미지를 Dockerfile을 기반으로 작성 시 사용
build:
# Dockerfile이 있는 디렉토리
context: ./01_FLASK_DOCKER
# Dockerfile명
dockerfile: Dockerfile
# 컨테이너 내부에서 다른 컨테이너를 접속하고 싶을 때 사용
# 다음 YAML 코드에서 db컨테이너를 app 컨테이너에서 사용하고 싶을 때
links:
- "db:mysqldb"
# docker run -p 옵션과 동일
ports:
- "80:8080"
container_name: appcontainer
# 여러 컨테이너를 docker-compose로 실행할 경우, 각 컨테이너가 실행 시작하는 시점 다를 수 있음
# 컨테이너 실행 순서만 제어, 컨테이너가 ready 상태가 될 때까지 제어❌
# ➡️ db컨테이너가 app컨테이너보다 먼저 실행되지만, ready상태는 어느 컨테이너가 먼저 될지 알수 없음
depends_on:
- db
db:
# db 컨테이너 이름 정의
# Docker Hub에 있는 이미지 사용하는 경우, image 사용 ➡️ mysql 이라는 Docker Hub에 있는 이미지 사용할게
image: mysql:5.7
# 컨테이너가 다운되었을 경우, 항상 재시작
restart: always 🌟
# docker run 옵션 -v랑 동일(Bind mount a volume, 상대경로는 가능)
volumes:
- ./mysqldata:/var/lib/mysql
# Dockerfile의 ENV옵션과 동일
# env_file 옵션으로 환경변수 값 있는 파일 읽어들일 수 있음(비번 있으니까)
environment:
- MYSQL_ROOT_PASSWORD=root1111
- MYSQL_DATABASE=fundb
ports:
- "3306:3306"
container_name: dbcontainer
# 이미지 재빌드
# --build 옵션을 넣으면 알아서 이미지를 새로 만들고 서비스를 재시작
docker-compose up --build -d
# 이미 작성된 이미지 사용
docker-compose up -d
docker-compose stop
docker-compose down
# 각 컨테이너의 모든 로그 확인
docker-compose logs
# 실행중인 Docker Compose의 docker-compose.yml 설정 확인
docker-compose config
env_file 파일 포멧 👆
services:
db:
image: mysql:5.7
restart: always
volumes:
- ./mysqldata:/var/lib/mysql
env_file:
- ./mysql.env
$ cat mysql.env
MYSQL_ROOT_PASSWORD=root1111
MYSQL_DATABASE=fundb
테스트 환경 셋업 👆
- 아나콘다 도커 ⇒ continuumio/miniconda 이미지 사용(기본 패키지만 설치)
- flask, pymysql을 위해 필요한 라이브러리 설치
- flask Dockerfile
FROM continuumio/miniconda
COPY ./ /app
WORKDIR /app
RUN pip install flask pymysql cryptography
CMD ["python", "main.py"]
.dockerignore(.gitignore처럼) 👆
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de2d2014aca6 httpd:alpine "httpd-foreground" 35 minutes ago Up 35 minutes 0.0.0.0:9999->80/tcp, :::9999->80/tcp apacheweb3
b5f41b0f4305 02_flask_mysql_app "python main.py" 4 hours ago Up 4 hours 0.0.0.0:80->8080/tcp, :::80->8080/tcp appcontainer
0e8edf6d7f3a mysql:5.7 "docker-entrypoint.s…" 4 hours ago Up 4 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp dbcontaine