DevOps

CI · CD 3회

우드의개발개발 2023. 3. 2. 11:11

 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