본문 바로가기
개발/Linux

gsjava up 우분투 CentOS 에 Docker install & 커테이너 생성 부팅시 시작

by 철권 2023. 9. 8.
728x90

Docker 컨테이너 자동 재시작

service 파일생성
systemd를 이용하여 서비스 파일을 생성한 후 해당 서비스를 부팅시 실행될 수 있도록 활성화합니다.

# cd /etc/systemd/system


# vi [설정한 서비스].service
[Unit]
Wants=docker.service
After=docker.service
 
[Service]
RemainAfterExit=yes
ExecStart=/usr/bin/docker start [실행할 docker container 이름]
ExecStop=/usr/bin/docker stop [실행할 docker container 이름]
 
[Install]
WantedBy=multi-user.target

서비스 등록

root@pnstest:/etc/systemd/system# systemctl enable fu1.1.service
Created symlink /etc/systemd/system/multi-user.target.wants/fu1.1.service → /etc/systemd/system/fu1.1.servic                     e.

우선 vmware에서 리눅스를 설치 했는데 용량이 모자라서  HDD 용량 늘리기 먼저 실행

UI에서 

디스크 확인

$ cfdisk

                                                           Disk: /dev/sda
                                       Size: 1.37 TiB, 1500301910016 bytes, 2930277168 sectors
                                    Label: gpt, identifier: D39CD9F7-5BFF-4045-B76B-88E7E376A3CB

    Device                                Start                   End              Sectors            Size Type
>>  /dev/sda1                              2048                  4095                 2048              1M BIOS boot                 
    /dev/sda2                              4096               2101247              2097152              1G Linux filesystem
    /dev/sda3                           2101248            2930274303           2928173056            1.4T Linux filesystem
    Free space                       2930274304            2930277134                 2831            1.4M

구조 확인

$ lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0                       7:0    0 69.9M  1 loop /snap/lxd/19188
loop1                       7:1    0 55.4M  1 loop /snap/core18/1944
loop2                       7:2    0 31.1M  1 loop /snap/snapd/10707
sda                         8:0    0  1.4T  0 disk 
├─sda1                      8:1    0    1M  0 part 
├─sda2                      8:2    0    1G  0 part /boot
└─sda3                      8:3    0  1.4T  0 part 
  └─ubuntu--vg-ubuntu--lv 253:0    0  200G  0 lvm  /
sdb                         8:16   0  1.8T  0 disk /datadisk
sr0                        11:0    1 1024M  0 rom

vmware 사이즈 늘리기

lvextend -L+300G /dev/mapper/ubuntu--vg-ubuntu--lv 
# resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv 

===========Docker 관리 시작=============

CentOS

# yum-utiles 패키지 설치
sudo yum -y update
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 이전 버전 제거
sudo yum remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine
# 최신 버전 설치
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Docker 실행
sudo systemctl start docker

# 부팅 시 Docker 데몬 자동 시작 설정
# sudo systemctl enable docker

우분투

이전버전 제거

apt-get remove docker docker-engine docker.io

설치: 

sudo apt update && sudo apt upgrade

#apt install -y docker.io

종속성 패치지 설치: #snap refresh

# snap install  docker
docker 20.10.17 from Canonical✓ installed

root@pnstest:/etc/apt/sources.list.d# docker --version
Docker version 20.10.21, build 20.10.21-0ubuntu1~20.04.1

에러 로그 확인 : #docker container logs -t a9a38ad23aeb

 

실행후 삭제

$ sudo docker run --rm hello-world

우분투 이미지 다운

$docker pull ubuntu

도커 이미지 확인

root@pnstest:/etc/apt/sources.list.d# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
ubuntu        latest    08d22c0ceb15   6 weeks ago     77.8MB
hello-world   latest    feb5d9fea6a5   19 months ago   13.3kB

도커 이미지로 컨테이너 생성 (-it 가 없으면 실행이 안된다.)

root@pnstest:/etc/apt/sources.list.d# docker create -it --name po_ubuntu ubuntu
f8d6d966c9e39308616cbc8f18e7802ebf2fa42116895c69a2bdcc5f284d530c

docker ps -a여기서 컨테이너 관련 자주쓰이는 옵션들을 알아보고 가자.

-d detached mode 흔히 말하는 백그라운드, 데몬 모드
-p 호스트PC와 컨테이너의 포트를 연결 (포워딩)
-e 컨테이너 내에서 사용할 환경변수 설정
–name 컨테이너 이름 설정
–rm 프로세스 종료시 컨테이너 자동 제거
-i 상호 입출력
–t tty를 활성화하여 bash 쉘을 사용

 

root@pnstest:/etc/apt/sources.list.d# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED             STATUS                         PORTS     NAMES
ef2b5ae685fd   ubuntu        "/bin/bash"   51 seconds ago      Created                                  po_ubuntu
dbfc5b46deb5   hello-world   "/hello"      About an hour ago   Exited (0) About an hour ago             zealous_moore
43b74c67e439   hello-world   "/hello"      About an hour ago   Exited (0) About an hour ago             objective_taussig

실행 status가 up이 나와야 한다.

root@pnstest:/etc/apt/sources.list.d# docker start po_ubuntu
po_ubuntu
root@pnstest:/etc/apt/sources.list.d# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED             STATUS                         PORTS     NAMES
f8d6d966c9e3   ubuntu        "/bin/bash"   57 seconds ago      Up 3 seconds                             po_ubuntu
dbfc5b46deb5   hello-world   "/hello"      About an hour ago   Exited (0) About an hour ago             zealous_moore
43b74c67e439   hello-world   "/hello"      About an hour ago   Exited (0) About an hour ago             objective_taussig

커테이너에 들어가기

root@~~# docker exec -it f8d6d966c9e3  /bin/bash

root@c456623003b1:~# 

================여기까지가 기본 설치 완료 이제는 컨네이너에 들어가서 설정한다.========================

우분투를 설치 했으니 네트워크 관련을 설치 한다.

 

$ sudo apt update
$ sudo apt install openssh-server
root@f8d6d966c9e3:/# apt install net-tools

vi /etc/ssh/sshd_config

PermitRootLogin yes

root@0317b2371f7e:/etc/init.d# ./ssh start
 * Starting OpenBSD Secure Shell server sshd                                                         [ OK ]

종료: exit 

docker stop 031

현재까지 설치한 내용 저장

root@pnstest:/etc/apt# docker container commit -a "kslee" -m "posoid" ubuntu po/web:1.0

root@pnstest:/etc/apt# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
po/web       1.0       f4568ad164f1   30 seconds ago   278MB
ubuntu       latest    3b418d7b466a   2 weeks ago      77.8MB

이렇게 되면 내부에서만 연결이 된다. ssh를 연결해 보자

docker rm po_ubuntu ==> 삭제후 포트를 주고 다시 생성한다.생성하면서 컨테이너로 연결이 된다.

root@pnstest:/etc/apt/sources.list.d# docker run -i -t --name po_ubuntu  -p 55:22 ubuntu
root@91e50a71036c:/# 

root@pnstest:/etc/apt/sources.list.d# docker run -itd -p 55:22  --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro ubuntu

root@9ac462328f29:/sbin# service --status-all
 [ - ]  dbus
 [ ? ]  hwclock.sh
 [ - ]  mariadb
 [ - ]  procps
 [ - ]  rsync
 [ + ]  ssh
 [ - ]  unattended-upgrades

******  Docker IP 확인

docker exec CONTAINER_ID ip addr show eth0

 

docker run -it -d --gpus all --name "name" imagename:tag /sbin/init

docker exec -it 컨테이너ID /bin/bash

root@91e50a71036c:/#apt update

시간 설정

apt install tzdata
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

root@b6f29ed7481e:/sbin# apt install -y fdisk

apt-get install iputils-ping
apt install tcpdump
apt install -y telnet

root@91e50a71036c:/# apt install -y net-tools vim openssh-server curl

vi /etc/ssh/sshd_config

파일 가운데의 PermitRootLogin을 yes로 바꿈

service ssh start

passwd root

새로운 패스워드 입력 후 외부에서 55 포트로 접속 시도

처음 우분투 컨테이너를 생성하면 정말 아무것도 설치가 되어 있지 않다.  여러가지 설치를 완료 후 이미지 commit를 하고 /sbin/init으로 실행 하면 서비스 등록 된것들이 실행이 된다.

docker run -itd -p 55:22 \
-p 8444:8443 --privileged=true --name po2 -v /sys/fs/cgroup:/sys/fs/cgroup:ro po1 /sbin/init

/root/.bashrc 에 ssh 접속시 필요한 명령어를 넣어서 사용할 수 도 있다.

**** 이미지 다른 서버로 보내서 설치 하기

**이미지 tar로 저장하기

# docker save [option] {파일명} [이미지명:태그]

▶ ex: docker save -o node.tar node:3
-o 옵션은 저장할 파일명을 지정하는 것이다.

*** 이미지 로드 하기

# docker load -i {파일명.확장자}

▶ ex: docker load -i node.tar
-i 옵션은 파일을 input한다는 옵션명령어 이다.

 

 

$ docker run -it --name pos_ubuntu ubuntu 한줄이면 위에 attach하여 쉘에 접속한거까지 한번에 된다.

컨테이너 종료하면서 나가기 : exit

컨테이너 종료 없이 나가기 # 내부 에서 Ctrl + P + Q 누르기

*** 이미지 제거

$docker rm hello-world

모든 컨테이터 표시 명령

root@pnstest:/etc/apt/sources.list.d# docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                     PORTS     NAMES
43b74c67e439   hello-world   "/hello"   8 minutes ago   Exited (0) 8 minutes ago             objective_taussig

실행중 Docker Container 확인 명령

sudo systemctl enable docker

sudo systemctl start docker

sudo systemctl enable containerd

sudo systemctl start containerd

마리아 DB 도커 전용으로 생성 mypassword  == 내가 원하는 패스워드를 넣어서 실행 할것

docker run \
-d \
--restart=always \
--name=mariadb \
-p 3307:3306 \
-e MYSQL_ROOT_PASSWORD=mypassword \
-e TZ=Asia/Seoul \
-v /data/docker/mariadb/conf.d:/etc/mysql/conf.d \
mariadb:latest

접속하기

docker exec -it mariadb mariadb -u root -p mypassword

728x90
반응형