Docker 내부에 명령어 전달하기.(컨테이너 내부에 자동화가 필요할때)
안녕하세요 달소입니닷.
이번글은 Docker 내부에 명령어를 전달하는 가장 기본적인 방법입니다.
docker 내부에서 반복적인 cron 작업등을 설정할때 컨테이너 내부에서 설정하는것보다 외부에서 설정하는편이 아무래도 효율적이기때문에 해당 방식으로들 진행합니다.
내부 명령어 전달은 docker exec를 사용합니다.
주의할점은 명령어를 실행하는 주체는 컨테이너이기때문에 반드시 컨테이너 내부에서 사용가능한 명령어만 사용해야하며 절대경로를 입력하시는편이 아무래도 좋습니다.
사용법
docker exec [컨테이너이름] [명령어]
먼저 명령어를 전달할 컨테이너의 이름을 docker ps로 확인합니다.
저는 해당 ds-php7.4-fpm-svrforum 컨테이너에 명령어를 내릴 예정입니다.
docker exec ds-php7.4-fpm-svrforum /usr/local/bin/php --version
요렇게 내부에 명령어를 내릴수있습니다.
이걸 응용해서 host의 crontab에 적용하시면되겠습니다.
![profile image](/files/member_extra_info/profile_image/111/194/194111.jpg?t=1655947239)
오호~ 그렇게도 명령어를 내릴 수 있군요.
저는 docker exec ... 는 쉘에 들어 갈 때만 썻는데...
최근에는 만들어 주신 nginx + mariadb + php 한방 도커 스택으로 열심히 컨테이너를 올렸다 내렸다 하고 있습니다.
새로 wordpress 를 만드는 경우에 최고인 것 같습니다.
기존 사이트의 이사에는 아무래도 각자가 만든 사이트의 특성들이 있기에 약간의 삽질이 가해지는데(물론 이것도 다 포함해서 compose 할 수 있을 것 같기도 합니다^^), 그 중에서도 db 이사가 처음에는 난감했습니다.
분명 컨테이너 안에서 host에 있는 db파일(*.sql)을 바로 읽어들일 방법이 있을터인데, 결국 몰라서 host에서 컨테이너 안으로 복사해 넣고, 다시 mariadb 컨테이너 안으로 들어가서 db 가져오기를 했습니다.
docker cp /home/ubuntu/temp/wordpress.sql mariadb:/home 이런식으로요~ ㅎㅎㅎ
아른 방법이 있는지요?
눈도 안 좋아지고, 오타도 많아서 portainer를 굉장히 유용하게 쓰고 있는데(역쉬 GUI !!!),
db 역시 phpmyadmin 같은 것을 써 보려고, 로컬에 설치해서 연결해 보고, phpmyadmin 도커 이미지를 받아서 컨테이너로 만들어서도 해 보고 했는데 쉽지 않네요 ㅠㅠ 네트웍(ds-wordpress_default)에도 가입시켜 주고, 포트도 8080:80으로 잡았는데도 돵최 뜨지를 않네요. 계속 삽질 해 봐야겠습니다.
![profile image](/files/member_extra_info/profile_image/201/201.jpg?t=1706018011)
이미 볼륨매핑을해놓았기때문에
cp /home/ubuntu/temp/wordpress.sql -> ./data/db/ 여기에 넣으면 컨테이너 내부의 /var/lib/mysql/ 에 들어가있습니다.
portainer에서 콘솔 접속 후 cd /var/lib/mysql/ 로 가신뒤에
mysql -u root -p [db명] << wordpress.sql 만 하면 디비 이전 완료입니다.
추가로 phpmyadmin 대신에 3306을 포트매핑해줬기떄문에
heidisql 같은 툴로 ip: 3306 으로 접속하시면 됩니다.
![profile image](/files/member_extra_info/profile_image/111/194/194111.jpg?t=1655947239)
아흐~
볼륨 매핑이 되어있기 때문에 /data/wordpress 안에 기존 페이지들을 넣으면 컨테이너 내부의 /var/www/html 로 바로 반영이 된다는 것을 이미 알고 있는데도 왜 *.sql 도 /data/db에 넣으면 그렇게 될거라는 걸 몰랐을까요? 저는 바보인가 봅니다 ㅠㅠ
db 관리툴이 필요했던 이유는,
db에 기존 사이트의 url이 https://url 형태로 들어가 있어 이걸 http://ip 로 수정을 해야 일단 wp-admin 으로 접근이 가능했기 때문입니다.
뭐 결국 db의 wp_options 테이블에 update 명령줄로 바꿔서 접속은 했습니다^^
HeidiSQL, 이 간단한 툴을 두고 그 동안 무한 삽질을 했군요. 역시... 저는 바보인가 봅니다 ㅠㅠ
모르면 물어라... 죽을 때까지 변하지 않을 삶의 태도인 것 같습니다^^
하옇든 덕분에 이제 사이트 이사가 한결 수월해 졌습니다.
감사합니다^^
cmt alert