티스토리 뷰

vagrant 로 centos 설치

centos 폴더 생성 후 

docker_install.sh
0.00MB
ssh_conf.sh
0.00MB
Vagrantfile
0.00MB

상기 파일 복붙(C&P)

powershell 에서

cat Vagrantfile
vagrant box list
vagrant box add generic/centos9s
선택 -> virtualbox
vagrant status
vagrant up

( Vagrantfile 내에 .sh 파일들을 실행하여 centos 를 설치, 간단편리)

 

 

docker run -d --name mynginx nginx 

 docker run -d --name mynginx2 -p 9001:80  nginx

 

네트워크 구성 관련 테스트 서버구성
webserver ( apache)
dbserver (mysql)
os (alpine) - client
(alpine 은 db랑 통신 X , 웹서버만 통신, 웹서버는 db와 통신 필요)

docker network ls

 

docker network create mybridge --driver bridge

 

 nginx , alpine 실행

(alpine 은 i 옵션으로 즉시 실행)

 

 

sudo apt install bridge-utils

 

docker exec -it alpine /bin/sh (알파인은 배쉬 정보가 없어서 sh 로 접속)

현재 알파인은 mybridge 가 아니라 bridge 에 연결되어있다

 

 

기본 bridge network 로 container 끼리 통신 가능

 docker network inspect mybridge

 

 

기존 container 모두 정지 후 지우기
docker stop $(docker ps -q) ; docker rm $(docker ps -qa)

docker run -d --name apache --network mybridge httpd
(mybridge 연결)

 

DB container 생성
docker run -d --name mydb --network mybridge --env MYSQL_ROOT_PASSWORD=mypass mysql

 

docker run -d --name alpine -i alpine <=== 기본 bridge 에 연결 되어있음
docker exec -it alpine /bin/sh 에서 확인

docker network connect bridge apache

db는 web 서버의 bridge network 에 연결, 
alpine 은 web 서버의 mybridge network 에 연결

 

 

docker network create --driver bridge --subnet 172.30.0.0/16 --ip-range 172.30.0.0/24 --gateway 172.30.0.254 newbridge

docker run -d --name myapache --network newbridge httpd

(172.30. 대역 bridge network 생성 ) (이름 :  newbridge)

 

기본 bridge 이름은 docker0 으로 표시되고 나머지 추가 bridge 는 br-xxxxxxxxx 로 표시

 

docker run -d --name newapachex -p 192.168.25.10::80 httpd

(랜카드 여러개 시 특정 아이피 골라서 생성, 192.168.25.10로만 접속 가능, iptables 에 해당 대역 생성, 보안성)

 

docker network prune <=== 사용하지 않는 network 삭제

 

기존 container 모두 정지 후 지우기
docker stop $(docker ps -q) ; docker rm $(docker ps -qa)

 

docker run -d --name alpine --network host -i alpine
docker exec -it alpine /bin/sh
(host network 는 로컬server 와 공유해서 사용, /etc/hosts 까지)

 

docker run -d --name newalpine --network none -i alpine
docker exec -it newalpine /bin/sh
(none network 는 랜카드 생성 X)

 

기존 container 모두 정지 후 지우기
docker stop $(docker ps -q) ; docker rm $(docker ps -qa)

 

docker image 

docker run -d --name apache httpd
docker exec -it apache /bin/bash
apt update
apt install vim


dff /etc/issue /etc/issue.net <=== 리눅스에서 파일 두개의 차이점을 알려줌(비교)

docker diff apache <===  컨테이너의 이미지(httpd) 와 비교하는 것 
A = 추가 된 파일, 바뀌지 않은 파일
C = 편집된 파일
D = 삭제된 파일

 docker container commit -a "thisisme" apache custome_httpd:1.0 
( 사용중인 apache container 커스텀 이미지 생성 )
(-a : 커밋한 사용자 또는 작성자 정보를 지정)

docker run -d custome_httpd:1.0
docker exec -it clever_morse /bin/bash

 

 

tar 백업 (잘 안쓰는 방법)

docker run -d --name myhttpd httpd
docker container export myhttpd > myhttpd.tar
(.tar 로 백업)

 cat myhttpd.tar | docker image import - myhttpd:1.0
(.tar 로 복구)

docker 는 보통 쉘 스트립트를 실행하여 이미지나 컨테이너를 동작시킴

docker run -d --name apache6 myhttpd:1.0 /usr/local/apache2/bin/httpd -D FOREGROUND
( httpd -D FOREGROUND 명령어 입력 필요 )

 

 

docker 이미지 전송

docker image save -o mysql.tar mysql
(mysql.tar 로 백업)

sftp vagrant@192.168.25.20
put mysql.tar /home/vagrant

192.168.25.20 에서 
 docker image load -i mysql.tar
(tar 파일을 이미지로 )

 

 

기존 container 모두 정지 후 지우기
docker stop $(docker ps -q) ; docker rm $(docker ps -qa)

 

dockerfile 관련

mkdir work
cd work

myfile 생성

 

docker build --tag myimage:1.0 -f myfile /home/vagrant/work
(만든 myfile 로 이름이 myimage 인 이미지 생성, 빌드, 업데이트) 

수정 (마지막 RUN -> CMD )

다시 실행

RUN -> RUN 명령어는 도커파일로부터 도커 이미지를 빌드하는 순간에 실행
CMD -> CMD 명령어는 RUN 명령어가 이미지를 빌드할 때 실행되는 것과 달리, 이미지로부터 컨테이너를 생성하여 최초로 실행할 때 수행

 

vi dockerfile 

FROM alpine
RUN apk update
RUN apk add figlet
COPY src/greet.txt  /tmp  <=== 로컬Server 에 src/greet.txt 를 container 의 /tmp 로 복사 (상대경로로 인식)
CMD cat /tmp/greet.txt | figlet 
#CMD ["cat","/tmp/greet.txt"]   <=== 대괄호 있을 시 : json array 방식   , 없을 시 : exec 형식 (/bin/sh -c 'cal')
#ENTRYPOINT cat /tmp/greet.txt | figlet  <=== entryponint : 뒤에 인수를 붙여 사용가능

mkdir src
 echo "hellow world" > src/greet.txt

docker build -t greet:latest .
docker run greet:latest

 

 

vi dockerfile

FROM alpine:latest
RUN apk update
RUN apk add apache2
CMD /usr/sbin/httpd -D FOREGROUND

 

docker build --tag apache:alpine .  (--no-cache)
docker run -d apache:alpine

 

기존 container 모두 정지 후 지우기
docker stop $(docker ps -q) ; docker rm $(docker ps -qa)

vi dockerfile

From alpine:latest
RUN touch /tmp/1.txt
RUN cat /tmp/1.txt
#CMD sleep 3600s
RUN sleep 10s
CMD cal

docker build -t myimage:1.0
빌드과정 (RUN)
1. baseimage 를 다운 받고 컨테이너로 실행
2. 컨테이너에서 touch /tmp/1.txt 실행
=> docker commit => 도커 이미지 생성 후 현재 컨테이너 삭제
3. 새로 생성된 도커이미지를 컨테이너로 실행
4. cache 에서 저장

docker run myimage:1.0

 

 

 

 docker build -t myping .
docker run myping
(뒤에 인수 받기 가능)

 

 

댓글