Category Archives: Setting

centos, windows, eclipse, vscode, etc tools
각종 설정과 관련된 내용을 다룹니다.

[Setting | Docker] Private Registry 구축 및 사용

생성한 도커이미지를 내부적으로 관리하기 위하여 registry 이미지를 설치하고 사용하는 방법을 정리한다.


작성일 : 2022-05-27

1> 컨테이너 설치 및 실행

docker run -dit --name registry -p 5000:5000 registry
# --name : 컨테이너명
# -p : 할당포트
# -d : 백그라운드모드

2> 이미지 빌드

sudo docker build --tag 127.0.0.1:5000/nginx-opendocs:1.0 .

3> 이미지 푸시

sudo docker push 127.0.0.1:5000/nginx-opendocs:1.0

[Setting | Docker] NGINX 설치

도커에 환경 설정 파일을 변경하여 NGINX를 설치(Dockerizing)하는 방법을 정리한다.


작성일 : 2022-05-27

1> Dockerizing

Docker 컨테이너를 사용하여 어플리케이션을 패킹 & 배포하는 과정을 말함
아래와 같이 설정파일 (Dockerfile)과 리소스를 빌드하여 이미지를 배포함


2> conf.d폴더에 default.conf 파일 생성

server {
    listen       80;
    server_name  van.com;
    location / {
        root   /mnt/c/_Work/source/home;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

3> (변경 필요시) nginx.conf 파일 생성

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

4> Dockerfile 생성

# nginx최신 stable 버전 컨테이너를 커스텀
FROM nginx:1.22.0

# 기존 설정파일 삭제
RUN rm /etc/nginx/conf.d/default.conf
# 수정한 설정파일을 복사
COPY conf.d/default.conf /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/nginx.conf

# nginx 기동
CMD ["nginx", "-g", "daemon off;"]

# 포트는 80
EXPOSE 80

5> 컨테이너 생성 및 실행

Dockerfile이 위치한 같은 폴더에서 실행해야함

# 이미지 빌드
sudo docker build --tag nginx-opendocs:1.0 .

# 네트워크 확인 & opdnet IP 대역확인
sudo docker network ls
# - 없을 경우 생성
sudo docker network create --gateway 172.20.0.1 --subnet 172.20.0.0/21 opdnet
# - 네트워크 확인
sudo docker inspect opdnet
# ------------------------------------------
# IPAM > Config > Gateway와 같은대역 IP 지정해야함
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.20.0.0/16",
                    "Gateway": "172.20.0.1"
                }
            ]
        },
# Containers에 사용중인 IP는 중복되지 않아야함
        "Containers": {
            "d4c422b0ceb65ab5f45e2efe2c7da3137b7d66a985f3f222b1b974763529ea7c": {
                "Name": "sample",
                "EndpointID": "e0dc778cf7fe452b45c5bec1737050395c553d764de75f3a88aef565fe00166d",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.20.0.2/16",
                "IPv6Address": ""
            }
        },
# ------------------------------------------

# 컨테이너 설치 및 실행 (고정IP지정)
sudo docker run \
--name nginx-opendocs \
--network opdnet --ip 172.20.0.100 \
-d -p 80:80 \
-it \
-v /mnt:/mnt \
nginx-opendocs:1.0

6> 컨테이너 쉘에 접속하여 확인

컨테이너와 OS간 공유볼륨(5>에서 생성된 볼륨 > /mnt) 확인도 필요함

sudo docker run --rm -it nginx-opendocs:1.0 /bin/bash

[Setting | Docker] 명령어 정리

도커에서 자주 사용되는 명령을 정리한다.
(도커가이드 링크에 자세하게 설명됨)


작성일 : 2022-05-26
수정일 : 2022-05-26

1> 버전확인

 docker version

2> 컨테이너 설치 및 등록

docker run
## Example
## - 설치 및 실행
docker run --name nginx -d -p 80:80 nginx
docker run --name mysql -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
docker run \
--name nginx \
-d -p 80:80 \
-v /home/opendocs/docker/nginx/conf.d:/etc/nginx/conf.d \
nginx
## - 쉘접속
docker run --rm -it nginx /bin/bash
--name : 컨테이너 이름
-d : 백그라운드 모드로 실행
-p : 호스트와 컨테이너의 포트를 연결 (포워딩)
-v : 호스트와 컨테이너의 디렉토리를 연결 (마운트)
-e : 컨테이너 내에서 사용할 환경변수 설정
-rm : 프로세스 종료시 컨테이너 자동 제거
-it : -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
–link : 컨테이너 연결

3> 컨테이너 삭제

# 컨테이너 ID 확인
docker ps -a

# 컨테이너 삭제
docker container rm [CONTAINER_ID]

# 이미지 삭제
docker image rm [IMAGE_ID]

4> 컨테이너 IP확인

# inspect 이용
docker inspect -f "{{ .NetworkSettings.IPAddress }}" [CONTAINER_ID]
# exec 이용
docker exec [CONTAINER_ID] ip addr show eth0