Docker?
이미지(파일)를 기반으로 컨테이너(프로그램)을 만드는 소프트웨어이다. 이미지와 컨테이너라는 개념이 등장하는데 이미지는 실행파일로 컨테이너는 메모리에 올라간 프로그램이라고 보면 이해하기 용이하다.
Dockerfile 만들기
1. 컨테이너를 구동시킬 베이스 이미지를 FROM에 적어준다. 2. 컨테이너 구동될 때 코드가 저장 될 위치를 지정한다. 3. 지정한 폴더에 복사 할 파일을 복사한다. 4. 필요한 의존성 패키지를 설치한다. 5. 특정 포트만을 허용한다면 특정 포트를 노출시키고 6. 컨테이너 실행시 기본으로 실행시킬 명령어를 적어준다. 여기선 CMD 또는 ENTRYPOINT로 처리할 수 있다. CMD의 경우 오버라이드가 가능하고 ENTRYPOINT는 무조건 실행된다.
# Use official Node.js image as base image
FROM node:14
# Create a working directory inside the container
WORKDIR /app
# Copy application files into the container
COPY package.json /app
COPY index.js /app
# Install dependencies
RUN npm install
# Expose port 3000
EXPOSE 3000
# Set default command to start the server
CMD ["node", "index.js"]
Docker image 만들기
위에서 만든 도커 파일을 통해 이미지를 만들 수 있다. 이미지는 앱 실행에 필요한 운영체제 및 소프트웨어와 관련된 모든 파일을 포함하고 이를 패키지화 한 것이다. 컨테이너 구동 시 쓰기 레이어가 기존 이미지 레이어에 추가됨으로써 기반 이미지에 영향을 미치지 않고 컨테이너를 조작할 수 있다.
이미지를 만드는 방법은 docker build에 -t 태그를 주고 '이미지이름:태그'를 지정하면 된다.
docker build -t hello:world
yaml file 만들기
version: "3"
services:
nginx:
image: ubuntu
command: /bin/bash -c "apt-get update && \
apt-get install -y vim nginx && \
nginx -g 'daemon off;'"
ports:
- "80:80"
mysql:
image: mysql
environment:
- MYSQL_USER=jscode
- MYSQL_PASSWORD=jscode
- MYSQL_ROOT_PASSWORD=jscode
command: --default-authentication-plugin=mysql_native_password
ports:
- "3306:3306"
volumes:
- ./mysql_data:/var/lib/mysql
restart: always
environment:
MYSQL_DATABASE: jscode_db
미션
- ubuntu에 vim이 설치되어 있는 도커 이미지 만들기
- 80번 포트가 열려진 nginx 컨테이너 실행하고 localhost:80 확인해보기
- ubuntu 컨테이너와 mysql 컨테이너(USER는 jscode, DB 이름은 jscode_db, ROOT_PASSWORD와 PASSOWRD는 jscode로 구성)를 docker compose를 통해 실행하고 ubuntu 컨테이너에서 mysql 컨테이너의 mysql에 접속하여 jscode USER로 로그인해보기
version: "3"
services:
nginx:
image: nginx:1.23-alpine
container_name: nginx
ports:
- "80:80"
ubuntu:
image: ubuntu
container_name: ubuntu
command: >
bash -c "
apt-get update && \
apt-get install -y mysql-client && \
sleep infinity
"
mysql:
image: mysql:8.0
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: jscode
MYSQL_DATABASE: jscode
MYSQL_USER: jscode
MYSQL_PASSWORD: jscode
ports:
- "3306:3306"
'DevOps' 카테고리의 다른 글
CI · CD 4회 (0) | 2023.03.06 |
---|---|
CI · CD 2회 (0) | 2023.02.28 |
CI CD 1회 (0) | 2023.02.24 |