컨테이너
•
컨테이너는 개별 소프트웨어가 실행되기 위한 환경을 독립적으로 운용할 수 있도록 해주는 운영체제 수준의 격리 기술을 의미한다.
(소프트웨어가 독립적으로 실행될 수 있게 해줌)
•
컨테이너는 기본적으로 리눅스 커널의 기능을 바탕으로 만들어졌다.
•
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
복사