Blog
Tools
Docker

Docker

Docker File

예시 코드
Dockerfile
# Ubuntu 기반 이미지 사용
FROM ubuntu:latest
# 환경 업데이트 및 필요한 패키지 설치
RUN apt-get update && \
    apt-get upgrade && \
    apt-get install -y openssh-server locales && \
    rm -rf /var/lib/apt/lists/* && \
    apt -y install sudo

# 로케일 설정
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
# SSH 서버 설정
RUN mkdir /var/run/sshd
# SSH 로그인을 위한 사용자 추가 (예: 사용자명 user, 비밀번호 userpassword)
RUN useradd -rm -d /home/ml -s /bin/bash -g root -G sudo -u 1001 ml
RUN echo 'ml:df159357' | chpasswd
# SSH 서버 설정 변경: 비밀번호 인증 허용
RUN sed -i 's/#\?PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
# SSH 서비스 포트 (기본: 22)
EXPOSE 22
# 컨테이너 시작 시 SSH 서비스 실행
CMD ["/usr/sbin/sshd", "-D"]
  • FROM : 어떤 이미지를 기반으로 할 것인지 설정
  • MAINTAINER : 이미지를 생성한 사람의 정보
  • RUN : 쉘 명령어 실행(이미지를 만들 때 실행)
  • CMD : 컨테이너가 시작되었을 때 실행할 실행 파일 또는 쉘 스크립트(컨테이너가 실행될 때마다 매번 실행)
  • VOLUME : 호스트와 공유할 디렉터리 목록
docker run -v /root/Document:/root

과 같이 사용하게 되면 호스트의 /root/Document 디렉터리를 컨테이너의 /root 디렉터리와 공유하게 됨

  • WORKDIR : CMD에서 설정한 실행 파일이 실행될 디렉터리
  • EXPOSE : 호스트와 연결할 포트 번호

이미지 생성

위의 옵션들을 사용해서 Dockerfile을 만들어준 후

docker build -t [이미지 이름] [Dockerfile 경로]

과 같이 실행해서 Docker Image를 생성해준다.

  • -f : 파일 지정

만약에 Dockerfile이름이 UbuntuDockerfile이라면

docker build -t ubuntu-custom -f UbuntuDockerfile . 

명령어를 사용하면 되고 맨 마지막에 있는 . 은 현재 경로를 의미한다.

이미지 실행

이미지 파일을 이용해서 Container를 생성해서 실행시킨다.

컨테이너 실행
docker run --name [Container 이름] -d -p [호스트 포트]:[컨테이너 포트] [이미지 이름] -v [호스트 디렉터리]:[컨테이너 디렉터리]
컨테이너 실행 확인
docker ps -a
ℹ️
  • -e MYSQL_ROOT_PASSWORD= : root 패스워드 설정
  • --name : 컨테이너 이름 설정
  • -d : 백그라운드 실행
  • -p 3306:3306 : 포트 설정
  • --link : docker간의 연결에 사용하는 옵션 사용 방법은 --link [컨테이너이름]:[별칭]이다. 예시 코드 👇
docker run -d --name spring-server -p 8080:8080 -link mysql:sql-server -p 22:22 spring-server:1.0.1

다음과 같은 옵션으로 연결해주면 mysql server의 url을 sql-server로 사용할 수 있다. 이를 이용해서 jdbc 연결 설정을 해줄 수 있다. 👇

application.yaml
  ... other codes 
  datasource:
    # jdbc:mysql://localhost:3306/[TABLE NAME]?userSSL=false&useUnicode=true&allowPublicKeyRetrieval=true
    url: jdbc:mysql://delivery-sql-server/delivery?userSSL=false&useUnicode=true&allowPublicKeyRetrieval=true
  ... other codes
  • 맨 마지막에 오는 것 : 이미지 이름

Docker 명령어

접속

sudo docker exec -it [컨테이너 이름] /bin/bash

이미지 다른 서버로 옮기기

도커 이미지를 다음과 같은 명령어로 tar 파일로 만들어줄 수 있다.

docker save -o delivery-sql.tar c8c78641fbcc  

이걸 옮길 서버로 옮기고 서버에서

docker load -i delivery-sql.tar

명령을 통해서 image로 로드하고 로드 된 이미지를 다른 Container를 실행하듯이 실행하면 된다.

ℹ️
  • -o : 생성될 파일 이름
  • c8c78641fbcc : 이미지 이름

Mysql

docker run --name delivery -e MYSQL_ROOT_PASSWORD=test1234 -d -p 3306:3306 mysql

PostgreSQL

docker run -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=df159357 \
-e TZ=Asia/Seoul -d \
-v ~/data/postgre:/val/lib/postgresql/data \
postgres:latest

Ubuntu

생성
docker run -d --name ubuntu -p 22:22 -it --privileged ubuntu:20.04
ℹ️
  • privileged : 호스트의 커널을 사용할 수 있게 해줌
접속
docker attach ubuntu

Dockerfile

# Ubuntu 기반 이미지 사용
FROM ubuntu:latest
 
# 환경 업데이트 및 필요한 패키지 설치
RUN apt -y upgrade
RUN apt -y update && apt install -y sudo
RUN apt install -y openssh-server locales 
RUN rm -rf /var/lib/apt/lists/* 
 
# 로케일 설정
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
 
# SSH 서버 설정
RUN mkdir /var/run/sshd
 
# SSH 로그인을 위한 사용자 추가 (예: 사용자명 user, 비밀번호 userpassword)
RUN useradd -rm -d /home/spring -s /bin/bash -g root -G sudo -u 1001 spring
RUN echo 'spring:test1234' | chpasswd
 
# SSH 서버 설정 변경: 비밀번호 인증 허용
RUN sed -i 's/#\?PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
 
# Sudo 설정
RUN chmod 640 /etc/sudoers
RUN sed -i '46ispring  ALL=(ALL:ALL) ALL' /etc/sudoers
 
# SSH 서비스 포트 (기본: 22)
EXPOSE 22
 
# 컨테이너 시작 시 SSH 서비스 실행
CMD ["/usr/sbin/sshd", "-D"]

Kali

설치
docker pull kalilinux/kali-rolling
생성
docker run -d --name kali -p 2022:2022 -it --privileged kalilinux/kali-rolling
attach kali

Dockerfile

# IMG 
FROM kalilinux/kali-rolling:latest
 
# 환경 업데이트 및 필요한 패키지 설치
RUN apt -y upgrade
RUN apt -y update && apt install -y sudo
RUN apt install -y openssh-server locales 
RUN rm -rf /var/lib/apt/lists/* 
 
# 로케일 설정
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
 
# SSH 서버 설정
RUN mkdir /var/run/sshd
 
# SSH 로그인을 위한 사용자 추가 (예: 사용자명 user, 비밀번호 userpassword)
RUN useradd -rm -d /home/kali -s /bin/bash -g root -G sudo -u 1001 kali
RUN echo 'kali:test1234' | chpasswd
 
# SSH 서버 설정 변경: 비밀번호 인증 허용
RUN sed -i 's/#\?PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
 
# Sudo 설정
RUN chmod 640 /etc/sudoers
RUN sed -i '46ikali  ALL=(ALL:ALL) ALL' /etc/sudoers
 
# SSH 서비스 포트 (기본: 22)
EXPOSE 22
 
# 컨테이너 시작 시 SSH 서비스 실행
CMD ["/usr/sbin/sshd", "-D"]