Backend
home
🕒

2024. 9. 24 (Docker)

생성일
2025/01/24 05:52
태그

컨테이너

컨테이너는 개별 소프트웨어가 실행되기 위한 환경을 독립적으로 운용할 수 있도록 해주는 운영체제 수준의 격리 기술을 의미한다. (소프트웨어가 독립적으로 실행될 수 있게 해줌)
컨테이너는 기본적으로 리눅스 커널의 기능을 바탕으로 만들어졌다.
Windows 기반에서 컨테이너를 동작시키려면 Hypervisor를 활성화시켜, 리눅스 커널의 기능을 지원할 수 있어야 한다.

Ubuntu

시간 동기화 - 한국, 서울 시각으로 변경
sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
Plain Text
복사
Linux 명령어
uname -a
버전 릴리즈, cpu아키텍쳐 등 모든 시스템 정보 출력
uname -s
운영체제 이름만
uname -r
버전 릴리즈
uname -sr / uname -sr
-s, -r 이 같이 나옴
도커 명령어 정리
[실행 중인 컨테이너 목록 확인] docker ps [컨테이너 정지] docker stop my-nginx2 [현재 실행 중인 컨테이너 목록 확인] docker ps [모든 컨테이너 목록 확인] docker ps -a [컨테이너 다시 시작] docker start my-nginx [컨테이너의 로그를 확인] docker logs my-nginx [컨테이너 내부로 접속해서 파일 시스템을 탐색] docker exec -it my-nginx /bin/bash [컨테이너를 정지하고] docker stop my-nginx [컨테이너 삭제] docker rm my-nginx
Shell
복사
도커 및 필요 소프트웨어 설치
# 업데이트 sudo apt-get update # vim 설치 sudo apt-get install vim # curl 설치 sudo apt-get install -y curl # ca-certificates(인증서 관리), openjdk 17, git 설치 sudo apt-get install -y ca-certificates git openjdk-17-jre-headless sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update # docker-compose 설치 sudo apt-get install -y docker-compose # 로그인 사용자 그룹 docker 그룹에 추가 sudo usermod -aG docker $USER # 새로운 그룹 추가 newgrp docker # docker 컨테이너 리스트 확인 docker ps # run - 만든 뒤에 실행 # exec - 명령어 실행 # build - 도커 파일로부터 이미지를 만들어줌 # pull - 저장소로 부터 이미지 가져옴 # hello-world 이미지 가져오기 docker run hello-world # docker images 확인 docker images # 현재 실행중인 ps 확인 (running 상태만 확인시켜줌) docker ps # docker ps 확인 docker ps -a # docker 상세 정보 확인 docker info # 컨테이너 제거 (Container ID 축약해서 작성 가능) docker rm 8545d # 이미지 제거 docker rmi hello-world # nginx 가져오기 (최신 버전으로) docker pull nginx # nginx run (백그라운드 실행) docker run -d --name my-nginx -p 8080:80 nginx # nginx 정지 docker stop my-nginx -p 80 # nginx 컨테이너를 실행하고, -v 옵션으로 호스트의 디렉토리를 컨테이너의 # Nginx 기본 웹 서버 디렉토리(/usr/share/nginx/html)에 마운트 docker run -d --name my-nginx2 -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx # docker container 내부 접속 docker exec -it my-nginx2 /bin/bash
Shell
복사
# Dockerfile 생성 vim Dockerfile # 이미지 가져오기 (Dockerfile 통해) docker build -t my-image . # wordpress-compose 폴더 생성 및 docker-compose.yml 생성 + 실행 hms@ubuntu:~/Desktop$ cd wordpress-compose/ hms@ubuntu:~/Desktop/wordpress-compose$ vim docker-compose.yml hms@ubuntu:~/Desktop/wordpress-compose$ docker-compose up -d Creating network "wordpress-compose_default" with the default driver # 결과 확인 hms@ubuntu:~/Desktop/wordpress-compose$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1467e13699d0 wordpress:latest "docker-entrypoint.s…" 23 seconds ago Up 21 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp wordpress-compose_wordpress_1 edd4a0c49df8 mysql:5.7 "docker-entrypoint.s…" 23 seconds ago Up 21 seconds 3306/tcp, 33060/tcp wordpress-compose_db_1 # MySQL 접속 docker exec -it edd4a0c49df8 mysql -uroot -p # docker-compose down 후 다시 실행 hms@ubuntu:~/Desktop/wordpress-compose$ docker-compose down Stopping wordpress-compose_wordpress_1 ... done Stopping wordpress-compose_db_1 ... done Removing wordpress-compose_wordpress_1 ... done Removing wordpress-compose_db_1 ... done Removing network wordpress-compose_default hms@ubuntu:~/Desktop/wordpress-compose$ vim docker-compose.yml hms@ubuntu:~/Desktop/wordpress-compose$ docker-compose up -d Creating network "wordpress-compose_default" with the default driver Creating wordpress-compose_wordpress_1 ... done Creating wordpress-compose_db_1 ... done
Shell
복사
# docker-compose.yml version: '3' services: db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 1234 MYSQL_DATABASE: test_db wordpress: image: wordpress:latest ports: - "8080:80" environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: 1234 WORDPRESS_DB_NAME: test_db
Shell
복사
워드프레스 설치
## VSC 통해 SSH 연결 호스트에 연결 > xxx@192.168.xxx.xxx > Linux 선택 > 비밀번호 입력
Shell
복사
nginx.conf 생성
server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.html; location / { try_files $uri $uri/ /index.html; } }
Shell
복사
Dockerfile 생성
# Node image FROM node:20 AS build # working directory setting WORKDIR /app # package.json, package-lock.json copy COPY package*.json ./ # npm update, npm install RUN npm update RUN npm install # source code copy COPY . . # build RUN npm run build # nginx FROM nginx:alpine # nginx.conf copy COPY nginx.conf /etc/nginx/conf.d/default.conf # default file delete RUN rm -rf /usr/share/nginx/html/* COPY --from=build /app/build /usr/share/nginx/html # PORT EXPOSE 80 # nginx START CMD ["nginx", "-g", "daemon off;"]
Shell
복사
이미지 빌드 + 컨테이너 실행
docker build -t music . docker ps docker run -d --name react-app -p 80:80 music
Shell
복사
이미지 전체 삭제
docker rmi $(docker images -q)
Shell
복사

CI/CD 위한 프로젝트 세팅