오토 스케일링 - 단계 조정 작업
WORKDIR /var/www/html # 작업 폴더 cd의 의미와 같음 경로를 바꿔줌, exec -it
RUN echo ohayo >> ohayo.html # workdir로 경로를 변경한 뒤 echo를 이용해 /var/www/html 에서 파일 만들기
VOLUME /var/www/html # -v /tmp:/var/www/html과 비슷하나 호스트 경로를 지정할 수 없는 단점이 있음
EXPOSE 80 # 포트 지정 -P 옵션을 주면 -p 8080:80 이런 식으로 줄 필요 없이 바로 80으로 된다
ENTRYPOINT ["apachectl"] # apache 실행명령어
CMD ["-D", "FOREGROUND"] # apache 실행 명령어 옵션
도커 파일과 같은 곳에 aws.tar 넣기
// 빌드 명령어 현재 경로를 지정하여 도커파일 스크립트 수행을 하도록 함
[root@localhost test]#docker build -t sechim052339/hello:v1.0 .
[root@localhost test]# docker push sechim052339/hello:v1.0
[root@localhost test]# docker run -d -P --name hello sechim052339/hello:v1.0
// 컨테이너 지우기
[root@localhost test]# docker rm -f hello
// 이미지 지우기
[root@localhost test]# docker rmi sechim052339/hello:v1.0
docker ps 로 포트번호 확인한 뒤 브라우저에서 접속
// homepage 디렉토리에 토끼 이미지, index.html 올리고 난 후에 진행
# tar cvf test.tar images index.html
# vi Dockerfile
FROM nginx:latest
ADD test.tar /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"] # nginx 실행파일 기동
[root@localhost homepage]# docker build -t sechim052339/homepage:v1.0 .
[root@localhost homepage]# docker push
[root@localhost homepage]# docker run -d -p 9000:80 --name home sechim052339/homepage:v1.0
# mkdir wordpress && cd $_
# vi Dockerfile
FROM centos:7
MAINTAINER wony
RUN yum install -y httpd php php-mysql php-gd php-mbstring wget unzip
RUN wget https://ko.wordpress.org/wordpress-4.8.2-ko_KR.zip
WORKDIR /var/www/html
RUN unzip /wordpress-4.8.2-ko_KR.zip
RUN mv wordpress/* .
RUN chown -R apache:apache /var/www
CMD httpd -DFOREGROUND
# docker image build -t sechim052339/wordpress:v1.0 .
# docker push sechim052339/wordpress:v1.0
# docker run -d -p 88:80 --name wordpress sechim052339/wordpress:v1.0
// 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
[root@localhost wordpress]# docker run -d -p 80:80 --name wordpress --network test_bridge sechim052339/wordpress:v1.0
haproxy나 다른 걸로 단일장애지점을 예방할 수 있다.
# mkdir volume && cd $_
# mkdir bm01 ; touch bm01/test.txt
# docker container run -itd --name bm-test -v ~/bm01:/mnt centos:7
# docker container exec bm-test ls /mnt
[root@localhost ~]# docker volume create my-vol01 // 볼륨 공간을 만드는 명령어
[root@localhost ~]# docker volume ls // 리스트로 볼륨을 관리할 수 있음
# docker volume inspect my-vol01
[root@localhost ~]# docker run -itd --name vol-test -v my-vol01:/mnt centos:7 // vol-test 컨테이너에 my-vol01 볼륨 마운트
// 하나의 폴더를 두개의 컨테이너가 공유가능
[root@localhost ~]# docker run -itd -p 801:80 --name vol-web -v my-vol01:/usr/local/apache2/htdocs:ro httpd:latest
// 쉘 명령어 쓰려먼 sh 옵션 vol-test 컨테이너의 index.html 파일에 니하오 넣을 거임 curl 하면 니하오로 바뀐거 확인
[root@localhost ~]# docker exec vol-test sh -c "echo "Nihao" > /mnt/index.html"
// vol-web에서도 니하오로 바뀐게 보임. 볼륨을 공유하고 있기 때문
[root@localhost ~]# curl 192.168.1.79:801
Nihao
[root@localhost ~]# docker network create new-net --subnet 172.31.0.0/16 --ip-range 172.31.0.0/20 --gateway 172.31.0.1
[root@localhost ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
89642b583ef4 bridge bridge local
91c80ee35f61 host host local
b3c95f836b6d new-net bridge local
e62007e76105 none null local
c71f035a59af test_bridge bridge local
[root@localhost ~]# docker run -d -P --network new-net nginx
//운영자
[root@localhost ~]# mkdir onbuild
vi Dockerfile.base
FROM ubuntu:16.04
RUN sed -i 's/archive.ubuntu.com/ftp.daumkakao.com/g' /etc/apt/sources.list
RUN apt-get -y update
RUN apt-get -y install nginx
EXPOSE 80
ONBUILD ADD website*.tar /var/www/html/
CMD ["nginx", "-g", "daemon off;"]
// 개발자를 위한 빌드. -f를 주면 도커파일 이름을 마음대로 줄 수 있음
[root@localhost onbuild]# docker build -t sechim052339/web-base:v1.0 -f Dockerfile.base .
[root@localhost onbuild]# docker push sechim052339/web-base:v1.0
[root@localhost onbuild]# vi Dockerfile
FROM sechim052339/web-base:v1.0
// 개발자
도커파일과 같은 폴더내에 웹소스를 tar로 만들어서 두고 아래 명령어 진행
root@ubuntu-node02:~# mkdir onbuild
root@ubuntu-node02:~# cd onbuild/
Dockerfile 업로드
root@ubuntu-node02:~/onbuild# docker build -t sechim052339/web-site:v1.0 .
root@ubuntu-node02:~/onbuild# docker run -d -p 80:80 --name web-site sechim052339/web-site:v1.0
//개발자가 개발한 웹사이트를 push 하기위해 로그인
root@ubuntu-node02:~/onbuild# docker login
root@ubuntu-node02:~/onbuild# docker
root@ubuntu-node02:~/onbuild# docker push sechim052339/web-site:v1.0
// 로그인하면 .docker가 생김
root@ubuntu-node02:~/onbuild# ls -al /root/
두번의 빌드가 일어난다.
ec2 - MY-VPC - 80포트 열기 - 사용자 데이터
인스턴스 접속
[ec2-user]# docker run -d -p 80:80 --name webserver sechim052339/web-site:v1.0
브라우저에서 사이트 접속 확인
// 리부트해도 컨테이너가 실행 됨.
[root@localhost onbuild]# docker run -d -p 8888:80 --restart always --name test-restart sechim052339/web-site:v1.0
// aws 도커에서 실행
[ec2-user@ip-10-19-12-199 ~]$ docker run -d -p 5000:5000 --restart always --name private-docker-registry registry
# vi /etc/docker/daemon.json # 운영자에서 저장소 ip 넣어줌
{ "insecure-registries":["13.125.1.158:5000"] }
[root@localhost onbuild]# systemctl restart docker
// 사설 레지스트리로 이미지 옮기기
[root@localhost onbuild]# docker tag sechim052339/homepage:v1.0 13.125.1.158:5000/homepage:v1.0
잘 올라갔나 확인 위해서 우분투도커에서 실행하기
# vi /etc/docker/daemon.json # 운영자에서 저장소 ip 넣어줌
{ "insecure-registries":["13.125.1.158:5000"] }