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
'개발 > Linux' 카테고리의 다른 글
gsjava MariaDB CPU 모니터링 (1) | 2023.11.20 |
---|---|
gsjava ssh 파란색 안볼때 설정 (0) | 2023.09.18 |
gsjava arp를 이용한 차단 (0) | 2023.09.06 |
gsjava python3 No module named 'Cryptodome' (0) | 2023.08.31 |
gsjava openssl openssh 최신 버전 다운로드 주소 (0) | 2023.08.11 |