헤르메스 LIFE

[Docker] Ubuntu 에 Docker 설치 본문

기타

[Docker] Ubuntu 에 Docker 설치

헤르메스의날개 2024. 2. 4. 21:52
728x90

설치 환경

Ubuntu 22.04.3 LTS

Postgresql 최신 ( en_US.utf8 버전 )

Postgresql 14.1 ( ko_KR.utf8 버전 )

Redis 최신

MySQL 최신

 


1. Docker 설치

# 우분투 시스템 패키지 업데이트
$ sudo apt-get update

# 필요한 패키지 설치
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

# Docker의 공식 GPG키를 추가
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# Docker의 공식 apt 저장소를 추가
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 시스템 패키지 업데이트
$ sudo apt-get update

# Docker 설치
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

# Docker가 설치 확인
$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2024-02-04 13:00:01 KST; 44s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 17937 (dockerd)
      Tasks: 14
     Memory: 31.3M
        CPU: 493ms
     CGroup: /system.slice/docker.service
             └─17937 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

 2월 04 13:00:01 ubuntu-park systemd[1]: Starting Docker Application Container Engine...
 2월 04 13:00:01 ubuntu-park dockerd[17937]: time="2024-02-04T13:00:01.224355944+09:00" level=info msg="Sta>
 2월 04 13:00:01 ubuntu-park dockerd[17937]: time="2024-02-04T13:00:01.225281453+09:00" level=info msg="det>
 2월 04 13:00:01 ubuntu-park dockerd[17937]: time="2024-02-04T13:00:01.325635511+09:00" level=info msg="Loa>
 2월 04 13:00:01 ubuntu-park dockerd[17937]: time="2024-02-04T13:00:01.725682810+09:00" level=info msg="Loa>
 2월 04 13:00:01 ubuntu-park dockerd[17937]: time="2024-02-04T13:00:01.740688397+09:00" level=info msg="Doc>
 2월 04 13:00:01 ubuntu-park dockerd[17937]: time="2024-02-04T13:00:01.740824431+09:00" level=info msg="Dae>
 2월 04 13:00:01 ubuntu-park dockerd[17937]: time="2024-02-04T13:00:01.775524751+09:00" level=info msg="API>
 2월 04 13:00:01 ubuntu-park systemd[1]: Started Docker Application Container Engine.

2. Docker 시작

# Docker 서비스 시작
$ sudo systemctl start docker

# Docker 재시작
$ sudo systemctl restart docker

3. Docker 종료

 

4. 부팅 시 자동 시작

# 부팅 시 자동 시작 설정
$ sudo systemctl enable docker
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker

5. Docker 그룹에 현재 사용자 추가 ( sudo 권한 없이 Docker 명령을 사용하기 위함, 로그아웃 후 다시 로그인 )

# Docker 그룹에 현재 사용자 추가 (sudo 권한 없이 Docker 명령을 사용하기 위함, 로그아웃 후 다시 로그인)
$ sudo usermod -aG docker $USER

6. Docker 버전 확인

# Docker 버전 확인
$ docker --version
Docker version 25.0.2, build 29cf629

7. Docker Images 확인

# Docker Images 확인
$ docker images
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json": dial unix /var/run/docker.sock: connect: permission denied
-> sudo usermod -aG docker $USER
-> 로그아웃 > 로그인

# Docker Images 확인
$ sudo docker images

8. Docker 에 Database 설치

8-1. 영문 Postgresql 설치

# postgresql 을 다운로드
$ docker pull postgres

# 다운로드된 Images 확인
$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
postgres     latest    b0b90c1d9579   4 weeks ago   425MB

# Docker postgres 컨테이너 생성
# -d : 백그라운드 실행
# -p 포트 포딩 5432번 포트로 들어온 내용은 5432 번 포트로 포딩을 해주겟다는 내용
# -e 환경변수 설정 POSTRGRES_PASSWORD= 내용을 password로 설정
# --name Container 이름을 설정해줍니다. 
docker run -p 5432:5432 --name postgres_boot -e POSTGRES_DB=springboot -e POSTGRES_USER=hermeswing -e POSTGRES_PASSWORD=pass -d postgres
b86312a74a29db09079f4f82bd9be497c3099cfea58a9d87bf605df313caef81

# docker에 설치된 컨테이너 목록 조회
$ docker ps -a
CONTAINER ID   IMAGE      COMMAND                   CREATED              STATUS              PORTS                                       NAMES
b86312a74a29   postgres   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp   postgres_boot

# Docker Server 접속
$ docker exec -it postgres_boot bash
root@b86312a74a29:/#

root@b86312a74a29:/# locale -a
C
C.utf8
en_US.utf8
POSIX

root@b86312a74a29:/# psql --username hermeswing --dbname springboot
psql (16.1 (Debian 16.1-1.pgdg120+1))
Type "help" for help.

springboot=# \l
                                                          List of databases
    Name    |   Owner    | Encoding | Locale Provider |  Collate   |   Ctype    | ICU Locale | ICU Rules |     Access privileges     
------------+------------+----------+-----------------+------------+------------+------------+-----------+---------------------------
 postgres   | hermeswing | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | 
 springboot | hermeswing | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | 
 template0  | hermeswing | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/hermeswing            +
            |            |          |                 |            |            |            |           | hermeswing=CTc/hermeswing
 template1  | hermeswing | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/hermeswing            +
            |            |          |                 |            |            |            |           | hermeswing=CTc/hermeswing
(4 rows)

springboot=#

# Docker 컨테이너 멈춤
$ docker stop postgres_boot

# Docker 컨테이너 목록 확인
$ docker ps -a                                       
CONTAINER ID   IMAGE              COMMAND                   CREATED        STATUS                    PORTS     NAMES
8870b3eecebd   postgres-ko:14.1   "docker-entrypoint.s…"   21 hours ago   Exited (0) 17 hours ago             postgres_boot

# Docker 컨테이너 시작
# docker start -a [CONTAINER ID 또는 NAMES]
# -a option 은 --attach 의 약자로 postgres의 log를 보겠다는 뜻 
# docker start 8870b3eecebd
$ docker start postgres_boot

# Docker 컨테이너 삭제
$ docker rm postgres_boot

8-2. 한글 Postgresql 설치

8-2-1. Dockerfile 파일생성

$ vi Dockerfile

# 아래의 내용을 복사해서 붙여 넣는다.
FROM postgres:14.1
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime && \
    sed -i 's/# ko_KR.UTF-8 UTF-8/ko_KR.UTF-8 UTF-8/' /etc/locale.gen && \
    locale-gen
ENV LANG=ko_KR.utf8 \
    LC_COLLATE=ko_KR.utf8 \ 
    POSTGRES_INITDB_ARGS=--data-checksums

# 저장합니다.
:wq

8-2-2. Dockerfile 파일생성

# Dockerfile 이 생성된 내용
$ ll
-rw-rw-r-- 1 jypark jypark  264  2월  4 21:42 Dockerfile

8-2-3. Docker 이미지 생성 ( Dockerfile 이 존재하는 폴더에서 명령을 실행해야 합니다. )

# Docker 이미지 생성 ( Dockerfile 이 존재하는 폴더에서 명령을 실행해야 합니다. )
$ docker build -t postgres-ko:14.1 .

# Docker 이미지 확인
$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
postgres-ko   14.1      0a422413f5b8   7 minutes ago   375MB
postgres      latest    b0b90c1d9579   4 weeks ago     425MB

8-2-4. postgres-ko 설치 ( 영문버전 설치 하셨다면 삭제 후 다시 설치 )

# postgres-ko 설치
$ docker run -p 5432:5432 --name postgres_boot -e POSTGRES_DB=springboot -e POSTGRES_USER=hermeswing -e POSTGRES_PASSWORD=pass -d postgres-ko:14.1

# postgres_boot 접속
$ docker exec -it postgres_boot bash

# locale 확인 ( ko_KR.utf8 이 있네요. )
root@8870b3eecebd:/# locale -a
C
C.UTF-8
POSIX
ko_KR.utf8

# springboot DB 접속
root@8870b3eecebd:/# psql --username hermeswing --dbname springboot
psql (14.1 (Debian 14.1-1.pgdg110+1))
도움말을 보려면 "help"를 입력하십시오.

# DB 목록 확인
springboot=# \l
                                   데이터베이스 목록
    이름    |   소유주   | 인코딩 |  Collate   |   Ctype    |        액세스 권한
        
------------+------------+--------+------------+------------+---------------------------
 postgres   | hermeswing | UTF8   | ko_KR.utf8 | ko_KR.utf8 | 
 springboot | hermeswing | UTF8   | ko_KR.utf8 | ko_KR.utf8 | 
 template0  | hermeswing | UTF8   | ko_KR.utf8 | ko_KR.utf8 | =c/hermeswing     
            |            |        |            |            | hermeswing=CTc/hermeswing
 template1  | hermeswing | UTF8   | ko_KR.utf8 | ko_KR.utf8 | =c/hermeswing     
            |            |        |            |            | hermeswing=CTc/hermeswing
(4개 행)

8-3. Redis 설치

# redis 다운로드
$ docker pull redis
Using default tag: latest
latest: Pulling from library/redis
c57ee5000d61: Already exists 
a378724be99b: Pull complete 
5224cb0f59c4: Pull complete 
ef9d9b4b1db0: Pull complete 
234f81aa6553: Pull complete 
1c1f1738e37a: Pull complete 
4f4fb700ef54: Pull complete 
a4eb7afb9a79: Pull complete 
Digest: sha256:f44e91787b843612a3878d8d8fae227b9db63f471214314f5b2e73576ca633d0
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest

# 다운로드된 이미지 확인
$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
postgres-ko   14.1      0a422413f5b8   27 minutes ago   375MB
redis         latest    3ceffe93e5ee   3 weeks ago      138MB
postgres      latest    b0b90c1d9579   4 weeks ago      425MB

# redis-net 이라는 Docker Network를 생성한다.
$ docker network create redis-net
b4cf6c758f713478361e7cf590fa9d22ec890ffd547e008a2c3c2e2d1a9b1f52

# Docker Redis 컨테이너 생성
$ docker run --name redis_boot -p 6379:6379 --network redis-net -v redis_boot:/data -d redis redis-server --appendonly yes
68a29cd6a49a9bc5e06d7418a286ce087746d5687ba58902387f8dc9ea25b73c

# docker에 설치된 컨테이너 목록 조회
$ docker ps -a
CONTAINER ID   IMAGE              COMMAND                   CREATED          STATUS          PORTS                                       NAMES
68a29cd6a49a   redis              "docker-entrypoint.s…"   15 seconds ago   Up 14 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   redis_boot
8870b3eecebd   postgres-ko:14.1   "docker-entrypoint.s…"   15 minutes ago   Up 15 minutes   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp   postgres_boot

# Docker Redis 컨테이너 접속
$ docker run -it --network redis-net --rm redis redis-cli -h redis_boot
redis_boot:6379>

8-4. MySQL 설치

# docker에 mysql 이미지 설치
$ docker pull mysql 

# Docker 컨테이너 생성
# -d : 백그라운드 실행
# -p 포트 포딩 5432번 포트로 들어온 내용은 5432 번 포트로 포딩을 해주겟다는 내용
# -e 환경변수 설정 POSTRGRES_PASSWORD= 내용을 password로 설정
# --name Container 이름을 설정해줍니다.
# docker exec -> run a command on an existing/running container
# docker run -> create a new container from an image, and run the command there
$ docker run -d -p 3306:3306 --name mysql_boot -e MYSQL_ROOT_PASSWORD=1 -e MYSQL_DATABASE=springboot -e MYSQL_USER=hermeswing -e MYSQL_PASSWORD=pass -d mysql

# 생성된 Docker 컨테이너 확인
$ docker ps -a

# Docker MySQL 컨테이너 접속
$ docker exec -it mysql_boot bash
# mysql version 확인
# mysql -v
# mysql 접속 password : 1
# mysql -u root -p

# Docker 컨테이너 시작
$ docker start mysql_boot

# Docker 컨테이너 멈춤
$ docker stop mysql_boot

# Docker 컨테이너 삭제
$ docker rm mysql_boot

각 컨테이너가 시작됐는지 여부를 확인해서 컨테이너를 실행하는 Script 예제

docker 컨테이너 확인

$ docker ps -a
CONTAINER ID   IMAGE              COMMAND                   CREATED      STATUS                    PORTS                                       NAMES
68a29cd6a49a   redis              "docker-entrypoint.s…"   3 days ago   Exited (0) 33 hours ago                                               redis_boot
8870b3eecebd   postgres-ko:14.1   "docker-entrypoint.s…"   3 days ago   Up 14 minutes             0.0.0.0:5432->5432/tcp, :::5432->5432/tcp   postgres_boot

postgresql_start.sh

#!/bin/zsh

# 컨테이너 이름 또는 ID를 여기에 입력하세요.
CONTAINER_NAME="postgres_boot"

# 컨테이너가 실행 중인지 확인
RUNNING=$(docker inspect --format="{{.State.Running}}" $CONTAINER_NAME 2>/dev/null)

# 컨테이너가 실행 중이 아니면 시작
if [ "$RUNNING" != "true" ]; then
    echo "PostgreSQL이 실행 중이 아닙니다. 시작 중..."
    docker start $CONTAINER_NAME
    echo "PostgreSQL 이 시작되었습니다."
else
    echo "PostgreSQL 이 이미 실행 중입니다."
fi

실행 권한 추가

$ chmod 766 postgresql_start.sh

시작

# Docker 컨테이너를 백그라운드에서 실행
# docker start postgres_boot

$ ./postgresql_start.sh                  
PostgreSQL 이 이미 실행 중입니다.

# Docker 컨테이너 중지
$ docker stop postgres_boot  
postgres_boot

$ ./postgresql_start.sh    
PostgreSQL 이 실행 중이 아닙니다. 시작 중...
postgres_boot
PostgreSQL 이 시작되었습니다.

 


출처 : https://velog.io/@osk3856/Docker-Ubuntu-22.04-Docker-Installation

 

[Docker] Ubuntu 22.04 Docker 설치

Ubuntu 22.04 에 Docker 설치하기

velog.io

https://zerostarting.tistory.com/61

 

도커(docker) 설치 방법 - 우분투(ubuntu)

Ubuntu에서 Docker를 설치하는 방법은 다음과 같다. 1. 시스템 업데이트 sudo apt update 2. 필요한 의존성 패키지 설치 sudo apt install -y apt-transport-https ca-certificates curl software-properties-common 3. Docker 공식 GPG

zerostarting.tistory.com

https://hermeslog.tistory.com/541

 

[SpringBoot] Docker에 PostgreSQL 설치 / 연결하기

IDE : IntelliJ JDK : OpenJDK 11 Framework : Spring Boot 2.5.2 Database : PostgreSQL 최신버전 ( 라이센스도 소스공개의무도 없음 ) 첨부파일이 MySqlRunner 로 되어있는데.. MySQL 접속테스트 중 소스만 바뀐거라.. ㅎㅎ Do

hermeslog.tistory.com

https://hermeslog.tistory.com/635

 

[Redis] Docker에 Redis 설치하기

Redis는 In Memory Key, Value 데이터 구조의 데이터를 저장할 수 있는 비정형 데이터 베이스입니다. 메모리 DB 이기때문에 속도가 빠르고, 영속성 및 다양한 데이터 구조와 같은 부가적인 기능을 지원

hermeslog.tistory.com

https://hermeslog.tistory.com/540

 

[SpringBoot] MySQL/Maria 연결하기

IDE : IntelliJ JDK : OpenJDK 11 Framework : Spring Boot 2.5.2 Database : MySql 최신버전 ( Oracle 에 라이센스비를 지급해야 하고, 소스공개의 의무가 존재함 ) Maria 최신버전 ( 소스공개의 의무가 존재함 ) Docker 설치

hermeslog.tistory.com

 

728x90