[확인내용]
▶ docker01
- docker01 네트워크 설정
[root@docker01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
- 디스크 파티션
[root@docker01 ~]# fdisk -l
▶ docker02
- docker02 네트워크 설정
[root@docker02 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
- 디스크 파티션
[root@docker02 ~]# fdisk -l
[확인내용]
▶ docker01 - docker 설치
- yum-utils 설치
[root@docker01 ~]# yum install -y yum-utils
- yum-config-manager 를 통해서 docker 저장소 설정
[root@docker01 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 최신 버전 도커 엔진 설치
[root@docker01 ~]# yum -y install docker-ce docker-ce-cli containerd.io
- 도커 시작
[root@docker01 ~]# systemctl start docker
- 실행중인 도커 확인
[root@docker01 ~]# systemctl status docker
- Docker 서비스를 운영체제 부팅시 자동 시작하도록 설정
[root@docker01 ~]# sudo systemctl enable docker
- 도커 버전 확인
[root@docker01 ~]# docker --version
▶ docker01 - docker-compose 설치
- docker-compose 설치
[root@docker01 ~]# sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- docker-compose 실행 권한 부여
[root@docker01 ~]# sudo chmod +x /usr/local/bin/docker-compose
- 설치된 docker-compose 실행 확인
[root@docker01 ~]# docker-compose --version
▶ docker02 - docker 설치
- yum-utils 설치
[root@docker02 ~]# yum install -y yum-utils
- yum-config-manager 를 통해서 docker 저장소 설정
[root@docker02 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 최신 버전 도커 엔진 설치
[root@docker02 ~]# yum -y install docker-ce docker-ce-cli containerd.io
- 도커 시작
[root@docker02 ~]# systemctl start docker
- 실행중인 도커 확인
[root@docker02 ~]# systemctl status docker
- Docker 서비스를 운영체제 부팅시 자동 시작하도록 설정
[root@docker02 ~]# sudo systemctl enable docker
- 도커 버전 확인
[root@docker02 ~]# docker --version
[확인내용]
▶ docker01
- 방화벽 중지
[root@docker01 ~]# systemctl stop firewalld [root@docker01 ~]# systemctl disable firewalld [root@docker01 ~]# systemctl status firewalld
- SELinux 중지
[root@docker01 ~]# setenforce 0 [root@docker01 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config [root@docker01 ~]# getenforce
▶ docker02
- 방화벽
[root@docker02 ~]# systemctl stop firewalld [root@docker02 ~]# systemctl disable firewalld [root@docker02 ~]# systemctl status firewalld
- SELinux 중지
[root@docker02 ~]# setenforce 0 [root@docker02 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config [root@docker02 ~]# getenforce
[확인내용]
▶ docker01, docker02
- 1/2. user1은 루트 권한 흭득 및 패스워드 요구 x
[root@docker01 ~]# sudo vi /etc/sudoers 101 user1 ALL=(ALL) ALL 111 user1 ALL=(ALL) NOPASSWD: ALL
- 3/4. docker 명령 실행시 sudo 입력 x
[root@docker01 ~]# su - user1 [user1@docker01 ~]$ sudo usermod -aG docker user1 [user1@docker01 ~]$ groups user1
- 3/4. user1으로 docker 명령 가능
[user1@docker01 ~]$ docker container ls
- ※ 만약 user1으로 docker 명령어를 쳤을 때 아래와 같은 에러문이 나온다면
[user1@docker01 ~]$ docker container ls Got 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/containers/json": dial unix /var/run/docker.sock: connect: permission denied
- 도커 데몬 소켓에 권한을 부여한다.
[user1@docker01 ~]$ sudo chmod 666 /var/run/docker.sock
[확인내용]
▶ docker02
- 컨테이너 배포로 사설 저장소 구축
[user1@docker02 ~]$ docker container run -d -p 5000:5000 --restart=always --name registry -v /home/rapa/registry:/var/lib/registry registry
- 저장소와 web GUI 연결
[user1@docker02 ~]$ docker run -d -p 8080:8080 --name registry-web --link registry:private -e REGISTRY_URL=http://211.183.3.202:5000/v2 -e REGISTRY_NAME=211.183.3.202:5000 --restart=always hyper/docker-registry web
▶ docker01
- 인증정보 필요 없이 접속할 수 있도록 설정, 보안상 좋지 않다. (서버 IP)
[user1@docker01 ~]$ sudo vi /etc/init.d/docker [user1@docker01 ~]$ cat /etc/init.d/docker DOCKER_OPTS=--insecure-registry 211.183.3.202:5000
- client에서 server 저장소 ip 설정
[user1@docker01 ~]$ sudo vi /etc/docker/daemon.json {"insecure-registries":["211.183.3.202:5000"]}
- 도커 데몬 재시작
[user1@docker01 ~]$ sudo service docker restart
- 파일 설정 확인
[user1@docker01 ~]$ docker info Insecure Registries: 211.183.3.202:5000 127.0.0.0/8
- 기본 이미지 pull
[user1@docker01 ~]$ docker pull httpd
- 이미지 형식 변경
[user1@docker01 ~]$ docker tag httpd:latest 211.183.3.202:5000/yang:1.0
- 이미지 push
[user1@docker01 ~]$ docker push 211.183.3.202:5000/yang:1.0
- [확인내용]
▶ 도커 컨테이너의 라이프 사이클
- 도커 허브는 불특정 다수가 접속 할 수 있는 공간이며 가입을 통해서 dockerfile을 사용하여 만든 이미지를 build 한 후 이미지를 push하고 저장소에서 pull할 수도 있다. 이미지를 저장소에 올리고 싶다면 docker push를 해주어야 하고 저장소에 저장한 이미지를 가져오고 싶다면 docker pull을 해야한다.
- 이미지들이 저장 되는 장소는 local registry(로컬 저장소), private registry(사설 저장소), public registry로 나뉜다. 그 중 private registry(사설 저장소)에 접속하기 위해서는 인증 정보가 필요한데 인증 정보는 config.json에 있으며 config.json에 있는 정보를 보고 인증 정보를 확인 받는다.
- 이 후 컨테이너를 배포할 수 있는데 docker container create 명령을 통해 이미지로부터 컨테이너를 생성만하거나 docker container start 명령을 통해 시작할 수 있다. docker container run 명령을 사용하면 컨테이너를 생성 및 시작할 수 있다.
- YAML 파일에 작성할때 그 중에서도 network를 정의 할때 만약 네트워크를 정의 하지 않으면 모든 컨테이너들은 bridge 타입의 docker0 네트워크에 연결된다.
- 도커는 시스템 수준의 가상화로 리눅스 사용 기술인 cgroup과 namespace를 사용하고 있는데, cgroup은 자원 사용 제한 즉 namespace를 통해 구획이 나뉜 각 컨테이너 별로 별도의 자원 사용량을 제공하고, namespace는 프로세스 자원 관리 즉 각각의 컨테이너별로 별도의 작업공간을 제공하여 각 컨테이너 별로 서로간에 영향을 끼치지 않도록 구획을 나누어준다.
[확인내용]
▶ docker01
- https://hub.docker.com/ 접속 및 로그인
- 본인 계정 클릭 후 Account Settings 클릭
- Security 클릭 후 New Access Token 클릭
- 토큰을 통한 로그인
[user1@docker01 ~]$ echo "토큰" | docker login --username gnon5367 --password-stdin
[user1@docker01 ~]$ cat ~/.docker/config.json
- [확인내용]
▶ docker01
- 도커 파일 구성
[root@docker01 ~]# vi Dockerfile [root@docker01 ~]# cat Dockerfile FROM centos:7 RUN yum -y install httpd EXPOSE 80 ONBUILD ADD web.tar /var/www/html/ CMD httpd -D FOREGROUND
- 이미지 만들기
[root@docker01 ~]# docker build -t 211.183.3.202:5000/baseweb:1.0 .
- 이미지 올리기
[root@docker01 ~]# docker push 211.183.3.202:5000/baseweb:1.0
- [확인내용]
▶ docker01
- 저장소에서 이미지 가져오기
[root@docker01 ~]# docker pull 211.183.3.202:5000/baseweb:1.0
- index.html 파일 생성 후 tar로 묶어주기
[root@docker01 ~]# echo "Hi yang seung hyun" > index.html [root@docker01 ~]# tar cvf web.tar index.html
- Dockerfile 생성
[root@docker01 ~]# vi Dockerfile [root@docker01 ~]# cat Dockerfile FROM 211.183.3.202:5000/baseweb:1.0
- 이미지 만들기
[root@docker01 ~]# docker build -t baseweb:2.0 .
- 컨테이너 배포하기
[root@docker01 ~]# docker container run --name Hyun -d -p 8888:80 baseweb:2.0
- [확인내용]
▶ docker01
- 네트워크 및 볼륨 생성
[root@docker01 ~]# docker network create testnetwork [root@docker01 ~]# docker volume create testvol
- Dockerfile
[root@docker01 ~]# vi Dockerfile [root@docker01 ~]# cat Dockerfile FROM centos:7 RUN yum clean all RUN yum update -y RUN yum -y install wget git httpd RUN wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm RUN yum -y localinstall remi-release-7.rpm RUN yum -y install epel-release yum-utils RUN yum-config-manager --enable remi-php74 RUN yum -y install php php-fpm php-gd php-mysql php-xml RUN git clone https://github.com/xpressengine/xe-core.git /var/www/html/xe WORKDIR /var/www/html/xe RUN mkdir files RUN chmod 707 -R files WORKDIR /var/www/html RUN chmod -R 707 xe RUN chown -R apache:apache xe EXPOSE 80 CMD httpd -D FOREGROUND
- 이미지 생성
[root@docker01 ~]# docker build -t xe:1.0 .
- docker-compose.yml
[root@docker01 ~]# vi docker-compose.yml [root@docker01 ~]# cat docker-compose.yml version: '3.8' services: xe: image: xe:1.0 networks: - testnetwork ports: - "80:80" links: - db:mysql depends_on: - db restart: always db: image: mysql:5.7 networks: - testnetwork volumes: - testvol:/var/lib/mysql # VOLUME USING ISCSI environment: - MYSQL_ROOT_PASSWORD=test123 - MYSQL_DATABASE=testdb restart: always networks: testnetwork: external: true volumes: testvol: external: true
- 컨테이너 배포
[root@docker01 ~]# docker-compose up -d
- 목록확인
[root@docker01 ~]# docker container ps
- 211.183.3.201/xe 접속