7.11

w0nyyy·2022년 7월 11일
0

docker 리뷰

vm 보다 용량이 작고 가벼움. 빠른 문제 대처 가능

하드웨어가 바닥 - os - 도커 설치 이다. 원래는. 그 위에 나누어진 컨테이너들. 근데 우리는 이걸 vm상에 한 것임. 실습이기 때문에

-q 리스트를 볼 때 이미지 id만 표시한다. 중요개념

inspect 상세정보를 보여준다.

실습

docker container ls 이렇게 길게 안씀

docker ps로 사용
단축 명령어에 대해 배워봄


[root@localhost ~]# docker ps	// 리스트 출력
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker rm -f $(docker ps -a -q)	
// -a 모든 컨테이너 실행 중이던 아니던  -q 컨테이너 id 뽑기

// 도커 이미지 출력 명령어
[root@localhost ~]# docker image ls
// 이미지 리스트 확인 단축 명령어
[root@localhost ~]# docker images

// 도커 이미지 지우기, nginx 이미지가 지워짐
[root@localhost ~]# docker image rm nginx
# docker image rm [이미지id] 또는 docker rmi // 컨테이너가 있으면 안지워짐

// :latest 를 붙여주어야함 centos는 리포지토리, 뒤에는 태그 이 둘이 함께 지워져야함
[root@localhost ~]# docker rmi centos:latest

// 여러개 지우기
# docker rmi [] [] ...

// 모든 이미지 지우기
[root@localhost ~]# docker rmi $(docker images -q)

60p 교재 참고
// 컨테이너 임시로 사용. 특정 기능을 잠시만 사용함 리스트 출력하면 프로세스가 꺼져있음
[root@localhost ~]# docker run --name test_cal centos:7 /bin/cal
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:c73f515d06b0fa07bb18d8202035e739a494ce760aa73129f60f4bf2bd22b407
Status: Downloaded newer image for centos:7
      July 2022
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

// 임시로 쓸건데 리스트에 남아있음. 바로 지우도록 하려면 rm옵션 추가
[root@localhost ~]# docker run --name test_cal1 --rm centos:7 /bin/cal
      July 2022
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

// 없어진 것을 확인
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND      CREATED         STATUS                     PORTS     NAMES
ac47147d928a   centos:7   "/bin/cal"   2 minutes ago   Exited (0) 2 minutes ago             test_cal


// 터미널로 들어갈 수 있게 /bin/bash 명령을 실행 -t는 터미널 옵션 -> -i 옵션이 없어서 입력이 안됨 -i 옵션은 표준입력
[root@localhost ~]# docker run -t --name test_bash centos:7 /bin/bash

// -d 옵션을 이용해 ping 이 백그라운드에서 실행되도록 함
[root@localhost ~]# docker run -d --name test_ping centos:7 /bin/ping localhost

// ping 나가는 것 확인
[root@localhost ~]# docker logs -t test_ping
2022-07-11T01:38:31.513949758Z PING localhost (127.0.0.1) 56(84) bytes of data.
2022-07-11T01:38:31.513978666Z 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.030 ms
2022-07-11T01:38:32.524653604Z 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.039 ms
2022-07-11T01:38:33.525427610Z 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.043 ms
2022-07-11T01:38:34.525498544Z 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.117 ms

// 컨테이너 포트 설정 및 실행 명령어
[root@localhost ~]# docker run -d -p 8080:80 --name test_port nginx

// cpu와 메모리의 용량을 지정해주는 명령어
[root@localhost ~]# docker run -d -p 8181:80 --cpus 1 --memory 256m --name test_resource nginx

// 볼륨을 마운트해서 컨테이너 생성
[root@localhost ~]# docker run -d -p 8282:80 --cpus 1 --memory 512m -v /tmp:/usr/share/nginx/html --name volume-container nginx

// 마운트 확인, 어제 했던 작업이 남아있음. 백업이 된 것을 확인
[root@localhost tmp]# ls
index.html


// format을 이용해 보고 싶은 것만 리스트 출력
[root@localhost tmp]# docker ps -a --format "table {{ .Command}}\t{{ .Ports}}"

// 동작중인 컨테이너에 연결
[root@localhost tmp]# docker attach test_bash


// 실행중인 컨테이너에 접속
[root@localhost tmp]# docker exec -it test_bash /bin/bash
[root@14d563db2ba0 /]#

//  test_port -> webserver로 컨테이너 이름 변경
[root@localhost tmp]# docker rename test_port webserver


// 컨테이너에 있는 파일 가져오기
[root@localhost ~]# docker cp webserver:/usr/share/nginx/html/index.html /root/index.html

// 컨테이너로 파일 보내기
[root@localhost ~]# docker cp ./index.html webserver:/usr/share/nginx/html/index.html

// 컨테이너 이미지로 만들기
[root@localhost ~]# docker commit -a "wony<test@example.com>" -m "FOOD" webserver test_commit:v1.0
sha256:f73d4a74940f4cb9b8af558d13ad9297d361a1e930de1ecd9d2cd4ae2d1e74f2

// 생성 확인
[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
test_commit   v1.0      f73d4a74940f   18 seconds ago   199MB
nginx         latest    55f4b40fe486   2 weeks ago      142MB
centos        7         eeb6ee3f44bd   9 months ago     204MB

// 이미지 저장
[root@localhost ~]# docker save -o test_commit.tar test_commit:v1.0

// test_bash 컨테이너 실행 명령어
[root@localhost ~]# docker exec -it test_bash /bin/bash


// 컨테이너 ip 확인 도구 (컨테이너에 들어가서 설치)
# yum install -y iproute -> ip a로 ip 확인 가능
# yum install -y net-tools -> ifconfig로 ip 확인 가능


docker 네트워크

컨테이너 속 eth0는 컨테이너의 가상 랜카드
veth1은 링크이다.
docker0은 가상 스위치, 공유기 역할을 하고 있음

// bridge를 가지고 있는게 docker0
[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
1e362bb6c781   bridge    bridge    local
91c80ee35f61   host      host      local
e62007e76105   none      null      local

// 브리지에 대한 상세내역
[root@localhost ~]# docker inspect bridge

// 도커 네트워크 생성
[root@localhost ~]# docker network create -d bridge --subnet 192.168.123.0/24 --ip-range 192.168.123.128/25 test_bridge

// 생성한 네트워크에 대한 상세내역
[root@localhost ~]# docker inspect test_bridge

// 도커 네트워크 연결
[root@localhost ~]# docker run -d -p 8383:80 --name webserver2 --network test_bridge nginx

// 이미 존재하는 test_bash 컨테이너 생성한 네트워크 대역으로 변경
[root@localhost ~]# docker network connect test_bridge test_bash

// 확인
[root@localhost ~]# docker inspect test_bash

// test_bash 컨테이너에 남아있는 bridge ip 제거
[root@localhost ~]# docker network disconnect bridge test_bash

### 도메인 서비스 !!!!

// 컨테이너에 들어가기
[root@localhost ~]# docker exec -it test_bash /bin/bash
// webserver2컨테이너에 핑 치기. 이름으로 쳤는데 핑나감. 마치 도메인처럼 
[root@14d563db2ba0 /]# ping webserver2
PING webserver2 (192.168.123.129) 56(84) bytes of data.
64 bytes from webserver2.test_bridge (192.168.123.129): icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from webserver2.test_bridge (192.168.123.129): icmp_seq=2 ttl=64 time=0.063 ms

// 이거 때문에 도메인처럼 통신 가능
[root@14d563db2ba0 /]# cat /etc/hosts

docker file

도커 파일 형식, 스크립트 작업을 해서 필요할 때 배포할 수 있도록 하는 것.

// 도커 파일 생성시 반드지 앞글자 대문자
[root@localhost test]# vi Dockerfile
FROM ubuntu:18.04			# 
MAINTAINER wony				# 유지보수자 정보 이메일을 넣어도 됨
LABEL "name"="webserver"	# 전달사항 누가봐도 웹서버 
ENV aloha=date				# 환경변수 설정. aloha를 치면 date가 나옴
ENV path=/var/www/html		# path변수를 치면 다음과 같은 경로
RUN sed -i 's/archive.ubuntu.com/ftp.daumkakao.com/g' /etc/apt/sources.list       # 아카이브의 주소를 다음카카오로 바꾸겠다.
RUN apt-get update			# RUN은 명령어를 실행할 때 사용
RUN apt-get install apache2 -y
COPY nihao /var/www/html/nihao	# 호스트의 파일을 복사
COPY hello.html $path		# path로 복사본 넘기기
ADD aws.tar /var/www/html	# 같은 경로내에 있는 파일 집어 넣기

-> 이후에 계속~ 하다 말았음

워드프레스 구현

// db서버 컨테이너 생성
# docker run -d -p 3306:3306 --name dbserver \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wpuser \
-e MYSQL_PASSWORD=wppass \
-e MYSQL_ROOT_PASSWORD=password --network test_bridge mariadb


// apache 컨테이너에 들어가서 웹서버를 설치해주어야함
[root@localhost ~]# docker run -it -d -p 8888:80 --name apache --network test_bridge centos:7

// 워드프레스 설치
# docker exec -it apache bash
yum install -y httpd php php-mysql php-gd php-mbstring wget unzip
wget https://ko.wordpress.org/wordpress-4.8.2-ko_KR.zip
cd /var/www/html
unzip /wordpress-4.8.2-ko_KR.zip
mv wordpress/* .
chown -R apache:apache /var/www
httpd &

// dbserver 핑 나감
[root@2b5ca7c47ed8 html]# ping dbserver
PING dbserver (192.168.123.131) 56(84) bytes of data.
64 bytes from dbserver.test_bridge (192.168.123.131): icmp_seq=1 ttl=64 time=0.053 ms
64 bytes from dbserver.test_bridge (192.168.123.131): icmp_seq=2 ttl=64 time=0.056 ms

도커 허브 docker hub

// test_commit이랑 똑같은 이미지인데 별칭이 달린 이미지가 생성됨 도커 허브에 전송하기 위해 만듬
[root@localhost ~]# docker tag test_commit:v1.0 sechim052339/test_commit:v1.0

// 도커에 올리기
[root@localhost ~]# docker push sechim052339/test_commit

-> 도커에 로그인 먼저 해주어야함
[root@localhost ~]# docker login

업로드 확인

우분투에서 도커 설치 및 컨테이너 생성

앞서 도커 허브에 업로드한 컨테이너를 받아서 배포한다

// 우분투에 도커 설치 먼저 진행 후 아래 커맨드 실행

root@ubuntu-node02:~# docker run -d -p 80:80 --name webserver sechim052339/test_commit:v1.0

0개의 댓글