컨테이너 지우기
docker rm -f $(docker ps -a -q)
wp-db 생성하기
my.cnf라는 환경구성 설정하기
# mkdir wordpress && cd $_
# vi my.cnf
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
bind-address = 0.0.0.0
여기서 관건은 bind-address = 0.0.0.0
wordpress를 실행할 수 있는 MySQL 데이터베이스 서버 구성하기
# vi Dockerfile.wp-db
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND noninteractive
# apt install 시에, 발생할 수 있는 예를들어 '패키시 설치 정말 하겠습니까?', '비밀번호 입력해주세요'같은거를 무시하고 진행할 수 있다고 한다.
ENV MYSQL_ROOT_PASSWORD=Test1752!
ENV MYSQL_DATABASE=wordpress
ENV MYSQL_USER=wpuser
ENV MYSQL_PASSWORD=Test1752!
RUN sed -i 's/archive.ubuntu.com/ftp.daumkakao.com/g' /etc/apt/sources.list
RUN apt-get update && \
apt-get install -y mariadb-server
RUN service mysql start && \
mysql -u root -p${MYSQL_ROOT_PASSWORD} -e "CREATE DATABASE ${MYSQL_DATABASE};" && \
mysql -u root -p${MYSQL_ROOT_PASSWORD} -e "CREATE USER '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_PASSWORD}';" && \
mysql -u root -p${MYSQL_ROOT_PASSWORD} -e "GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE}.* TO '${MYSQL_USER}'@'%';" && \
mysql -u root -p${MYSQL_ROOT_PASSWORD} -e "FLUSH PRIVILEGES;" && \
service mysql stop
COPY my.cnf /etc/mysql/my.cnf
EXPOSE 3306
CMD ["mysqld_safe"]
데이터베이스, 유저, 프리빌리지 권한 모두 생성하고 mysql 실행 후 멈춰!
|
docker build -t wp-db:v1.0 -f Dockerfile.wp-db .
docker run -d -p 3306:3306 --name wp-db --network test_bridge wp-db:v1.0
-f : 파일명
wp-web 생성하기
CentOS 7에서 WordPress를 실행하는 웹 서버용 Docker 이미지 만들기!
# vi Dockerfile.wp-web
FROM centos:7
MAINTAINER itssp0405@gmail.com
RUN yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm && \
yum -y install epel-release yum-utils && \
yum-config-manager --enable remi-php74 && \
yum -y install httpd php php-mysqlnd wget unzip mysql
RUN wget https://ko.wordpress.org/latest-ko_KR.zip
WORKDIR /var/www/html
RUN unzip /latest-ko_KR.zip
RUN mv wordpress/* .
RUN chown -R apache:apache /var/www
EXPOSE 80
ENTRYPOINT ["httpd", "-D", "FOREGROUND"]
|
docker build -t wp-web:v1.0 -f Dockerfile.wp-web .
docker run -d -p 80:80 --name wp-web --network test_bridge wp-web:v1.0
도커 데이터 관리
- Bind Mount
mkdir volume && cd $_
mkdir bm01 ; touch bm01/test.txt
docker container run -itd --name bm-test -v /root/volume/bm01:/mnt centos:7
docker container exec bm-test ls /mnt
- Volume
docker volume create my-vol01
docker volume list
docker volume inspect my-vol01
"Mountpoint": "/var/lib/docker/volumes/my-vol01/_data"
docker container run -itd --name vol-test -v my-vol01:/mnt centos:7
docker container run -itd -p 801:80 --name vol-web -v my-vol01:/usr/local/apache2/htdocs:ro httpd:latest #ro:readonly
curl 172.25.0.136:801
<html><body><h1>It works!</h1></body></html>
docker container exec vol-test sh -c "echo "Nihao-jyoonchu" > /mnt/index.html"
curl 172.25.0.136:801
Nihao-jyoonchu
도커 네트워크 관리
docker network list
docker network inspect bridge
"com.docker.network.bridge.name": "docker0",
docker network create new-net --subnet 10.33.0.0/16 --ip-range 10.33.0.0/20 --gateway 10.33.0.1
docker network list
docker tag sesac:sale jyoonpark/sesac:sale
docker images
그냥 이미지는 주소가 없으니까 docker hub는 주소같은 작업을 한다.
doker imgaes
docker login
docker push jyoonpark/sesac:sale
도커 허브에 레포지토리가 생성되었다!! 우왕
레포지토리 안에 sale이라는 이미지도 업로드가 되었음!!!
짱신기해 ㅎㅎ
food 이미지도 업로드 해보깅
docker tag sesac:food jyoonpark/sesac:food
docker images
docker push jyoonpark/sesac:food
Centos에서 이미지를 도커허브로 이미지를 push 했으니
Ubuntu를 통해 도커허브로 이미지를 pull 해보는 테스트
sudo docker run -d -p 8081:80 --name sale jyoonpark/sesac:sale
sudo docker run -d -p 8082:80 --name food jyoonpark/sesac:food
sudo docker ps
run을 사용하는 이유는 컨테이너를 pull + 실행 시키기 위해서 ~!
접속테스트
도커허브 더보기!!
도커 허브에 다른 사용자를 등록시켜주면
그 사용자가 명령어를 통해 이렇게 다운로드를 받을 수도 있다!!
Mr.Ddonggae씨 아이디어 공유 고맙습니다...ㅎ
운영자 역할 (CentOS)
# mkdir onbuild && cd $_
# vi Dockerfile.base
FROM ubuntu:18.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;"]
website*.tar /var/www/html/ 요기는 제외하고 이미지가 만들어진다.
# docker build -t jyoonpark/web-base:v1.0 -f Dockerfile.base .
# docker login
# docker push jyoonpark/web-base:v1.0
#vi Dockerfile
FROM jyoonpark/web-base:v1.0
개발자 역할 (Ubuntu)
짠!!
# mkdir onbuild && cd $_
# ls
website.tar
Dockerfile
# sudo docker images
# sudo docker build -t jyoonpark/web-site:v1.0 .
# sudo docker push jyoonpark/web-site:v1.0
운영자 역할 (CentOS)
docker run -d -p 8088:80 --name=web-site jyoonchu/web-site:v1.0
도커허브 꾸며보기
GCP
새 프로젝트 생성
인스턴스 만들기
#!/bin/bash
curl -fsSL https://get.docker.com/ | sh
yum -y install bash-completion wget unzip mysql
curl https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/docker.sh
systemctl enable --now docker
Compute Engine > 메타데이터 만들기 > SSH 키
도커 사설 레지스트리
sudo usermod -a -G docker jyoon
docker run -d -p 5000:5000 --restart=always --name private-docker-registry registr #저장소 서버
방화벽 규칙 만들기
인스턴스 > 수정 > 방화벽 태그하기
직접 타이핑쳐서 넣으면 된다.
도커 사설 레지스트리
Docker 운영팀에서 하는거임~!
# vi /etc/docker/daemon.json # 클라이언트
{ "insecure-registries":["34.64.225.72:5000"] }
# systemctl restart docker
도커 이미지 중에서 sesac들만 올려보자!!
docker images
docker tag sesac:sale 34.64.225.72:5000/sesac:sale
docker push 34.64.225.72:5000/sesac:sale
34.64.225.72:5000 => 일조의 name space이자 주소임!
docker tag sesac:food 34.64.225.72:5000/sesac:food
docker push 34.64.225.72:5000/sesac:food
docker tag wp-db:v1.0 34.64.225.72:5000/wp-db:v1.0
docker push 34.64.225.72:5000/wp-db:v1.0
docker tag wp-web:v1.0 34.64.225.72:5000/wp-web:v1.0
docker push 34.64.225.72:5000/wp-web:v1.0
=> total 4개를 업로드함
업로드 된 이미지/태그 조회하기
이미지 조회
curl -X GET 34.64.225.72:5000/v2/_catalog
이미지 태그 조회
curl -X GET 34.64.225.72:5000/v2/sesac/tags/list
이렇게 리스트를 확인할 수가 있다.
docker rmi -f $(docker images -q)
docker images
docker pull 10.34.64.225.72:5000/wp-db:v1.0
심지어 ip도 잘못입력함;;;ㅋㅋㅋㅋ
# sudo vi /etc/docker/daemon.json
{ "insecure-registries":["34.64.225.72:5000"] }
# sudo systemctl restart docker
GCP 인스턴스 외부ip인 34.64.225.72:5000가 충돌없이 통신할 수 있도록 데몬파일을 구성해준다.
이에 대한 자세한 설명은 아래 docker docs를 통해 찾아보았음!
미래에 또 궁금할 날 위해 메모....
https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file
docker pull 34.64.225.72:5000/wp-db:v1.0
docker run -d -p 3306:3306 --name wp-db 34.64.225.72:5000/wp-db:v1.0
docker ps
ip와 상관없이 네트워크를 빠르게 설정하는 방법
네트워크를 먼저 만들고 그 후에 연결하면 된다.
docker network create new-net
docker inspect new-net
docker network create new-net2
docker inspect new-net2
docker network connect new-net wp-db
docker network connect new-net wp-web
'Docker' 카테고리의 다른 글
멀티 컨테이너 구현2 (1) | 2024.01.31 |
---|---|
멀티 컨테이너 구현1 (1) | 2024.01.31 |
Docker 2 (3) | 2024.01.29 |
Docker 명령어 + 우분투에 도커 설치하기 (3) | 2024.01.26 |
Docker 1 (1) | 2024.01.25 |