"Docker 소프트웨어 엔지니어를 실천하는'Docker 잘 몰라'를 끝으로 한 권의 책을 만들었습니다."
12169 단어 Dockerdocker-composetech
그래서 저는 Docker를 잘 배우고 싶어요. 여러 조사를 통해 Zenn의 hongsan이 Docker의 입문서도 무료로 공개했고 처음부터 시도해 봤어요.
지령의 설명뿐만 아니라 가상화란 무엇입니까?이 점부터 설명하자면 제목과 같이 이 책은'잘 모르겠다'는 상태에서 벗어나기에 적합하다.
2022년 4월은 현재 무료이기 때문에 Docker 주변 지식에 불안한 점이 있는 사람은 꼭 한번 읽어보는 것을 추천한다.
하지만 작은 이삭과 환경이 나빠서 그런지 수레에 막힌 곳이 있으니 적어야 한다.
앞으로 이 책에 몰두하는 사람들을 도울 수 있다면 정말 좋겠다.
참고로 제 개발 환경은 다음과 같습니다.
이 글은'실천 Docker 소프트웨어 엔지니어가'Docker가 잘 모른다'고 끝낸 책'을 읽었다는 전제로 실렸다.
책에 사용된 요소는 기사에서도 사용될 수 있으니 양해해 주십시오.
mount path must be absolute.
3部:ボリューム
근처에 다음 명령이 나타납니다.게재 명령
$ docker container run \
--name db \
--rm \
--detach \
--platform linux/amd64 \
--env MYSQL_ROOT_PASSWORD=rootpassword \
--env MYSQL_USER=hoge \
--env MYSQL_PASSWORD=password \
--env MYSQL_DATABASE=event \
--mount type=volume,src=docker-practice-db-volume,dst=/var/lib/mysql \
docker-practice:db
나는 이것을 시도해 보았는데, 아래의 오류가 발생했다.docker: Error response from daemon: invalid mount config for type "volume": invalid mount path: 'C:/Program Files/Git/var/lib/mysql' mount path must be absolute.
에 따르면 지정된 설치권의 경로dst=/var/lib/mysql
는 인산염의 상대적인 경로로 여겨진다.조사를 많이 했는데 이런 기사가 나왔어요.
이를 참조하여 경로 지정을
//
부터 변경합니다.수정 후
$ docker container run \
--name db \
--rm \
--detach \
--platform linux/amd64 \
--env MYSQL_ROOT_PASSWORD=rootpassword \
--env MYSQL_USER=hoge \
--env MYSQL_PASSWORD=password \
--env MYSQL_DATABASE=event \
--mount type=volume,src=docker-practice-db-volume,dst=//var/lib/mysql \
docker-practice:db
위와 같은 명령으로 변경해 컨테이너를 만들었다.init.sql라는 디렉터리를 만들었습니다.
3章:バインドマウント
에는 DB의 초기화 조회를 용기에 연결하고 설치하는 주석이 있다.$ docker container run \
--name db \
--rm \
--detach \
--platform linux/amd64 \
--env MYSQL_ROOT_PASSWORD=rootpassword \
--env MYSQL_USER=hoge \
--env MYSQL_PASSWORD=password \
--env MYSQL_DATABASE=event \
--mount type=volume,src=docker-practice-db-volume,dst=/var/lib/mysql \
--mount type=bind,src=$(pwd)/docker/db/init.sql,dst=/docker-entrypoint-initdb.d/init.sql \
docker-practice:db
이 조작을 실행한 후 컨테이너 검사표에 들어갈 때 표를 작성하지 않습니다.컨테이너 안
/docker-entrypoint-initdb.d
,init를 조사해 보세요.sql라는 디렉터리를 만들었습니다.이것에 관해서는 실행하는 지령도 틀림없기 때문에 어떤 Docker의 새로운 방법입니까??상당히 어려운 부분을 조사했지만 사실상 이유는 간단했다.
/work
디렉토리에 명령이 실행되지 않았습니다.명령 내
$(pwd)
는 명령을 실행하는 디렉터리이기 때문에 참조할 때 init입니다.ql를 찾을 수 없습니다. Docker 측에서 빈 디렉터리를 만들었습니다.디렉터리에서 잘
/work
실행된 결과 초기화 조회가 실행되고 표가 만들어졌습니다.실행할 카탈로그를 확인하지 않으면서 회사에서 이러한 환경 구축을 하고, 여러 구성원에게 가로로 펼칠 때 각 구성원의 카탈로그 구조 등에 의존하지 않는 구조를 원한다.
DB에 로그인할 수 없습니다.
3部:Docker Compose
에서 지금까지의 명령을 docker-compose로 설정합니다.yml로 재현하는 절차를 설명했다.절차가 끝난 후
docker compose up
컨테이너를 시작하고 프로그램을 보면 첫 페이지와 메일을 보내는 페이지를 볼 수 있지만history 페이지가 보이지 않는다.오류 로그를 보고 다음과 같은 정보를 발견했습니다
PHP Fatal error: Uncaught PDOException: SQLSTATE[HY000] [1045] Access denied for user 'hoge'@'172.28.0.4' (using password: YES) in /src/history.php:15
DB에 연결되지 않은 것 같습니다.다시 한 번 봤는데 MySQL의 로그인 비밀번호에 typo가 있어요.
docker-compose.yml
db:
container_name: docker-practice-db
build:
dockerfile: docker/db/Dockerfile
context: .
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_USER: hoge
MYSQL_PASSWORD: pasword
MYSQL_DATABASE: event
volumes:
- type: volume
source: docker-practice-db-volume
target: /var/lib/mysql
- type: bind
source: ./docker/db/init.sql
target: /docker-entrypoint-initdb.d/init.sql
그림% 1개의 캡션을 편집했습니다.docker-compose.yml(수정 후)
db:
container_name: docker-practice-db
build:
dockerfile: docker/db/Dockerfile
context: .
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_USER: hoge
MYSQL_PASSWORD: password
MYSQL_DATABASE: event
volumes:
- type: volume
source: docker-practice-db-volume
target: /var/lib/mysql
- type: bind
source: ./docker/db/init.sql
target: /docker-entrypoint-initdb.d/init.sql
그런데 아직 연결이 안 된 것 같아요.docker compose up --build
컨테이너에 들어가면 환경 변수를 조사해도 이상한 점이 없다.# echo $MYSQL_ROOT_PASSWORD
rootpassword
# echo $MYSQL_USER
hoge
# echo $MYSQL_PASSWORD
password
# echo $MYSQL_DATABASE
event
도대체 어떻게 된 일인지 고민이 좀 돼서 DB의 데이터가 volume에 설치되어 있는 게 생각났어요.따라서volume를 삭제한 후에 구축합니다.
$ docker volume ls
DRIVER VOLUME NAME
local work_docker-practice-db-volume
$ docker compose down
[+] Running 4/4
- Container docker-practice-mail Removed 0.9s
- Container docker-practice-db Removed 0.9s
- Container docker-practice-app Removed 0.9s
- Network work_default Removed 0.1s
$ docker volume rm work_docker-practice-db-volume
work_docker-practice-db-volume
$ docker compose up --build
이렇게 하면 DB에 안전하게 연결할 수 있고 히스토리 페이지도 볼 수 있다.모든 페이지의 마지막 부분에는 그 페이지에 만들어진 자원을 삭제하는 절차가 기재되어 있지만, 페이지마다 다시 정렬할 때는 자원을 모두 삭제한 후에 다시 하는 것을 권장합니다.
총결산
내가 막힌 곳은 대략 상술한 세 곳이다.
제 과실도 있었지만 책 마지막에 디버깅 기법이 기재돼 있어 처음부터 잘 이해하면 다소 좌절된 부분도 스스로 해결하고 추진할 수 있다는 게 실감입니다.
제가 처음에도 말씀드렸지만 아직 이 책을 못 보신 분들은 꼭 한번 보세요.
마지막으로, 이렇게 간단하고 알기 쉬운 책을 무료로 공개해 주셔서 감사합니다!
Reference
이 문제에 관하여("Docker 소프트웨어 엔지니어를 실천하는'Docker 잘 몰라'를 끝으로 한 권의 책을 만들었습니다."), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/10inoino/articles/f0203b436566eb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)