0x0102
KDT - 로컬 환경에서 도커 다루기 본문
1. rocky linux 컨테이너로 띄워보기
$ docker pull rockylinux/rockylinux
로키 리눅스 받아오기
$ docker run -it --name=rocky-container rockylinux/rockylinux 내부에서수행할명령어
이미지 조회 및 로키 리눅스 접속
+ it 옵션: 컨테이너를 실행할 때 대화형(interactive)으로 실행하고 터미널(tty)을 할당하도록 지시하는 옵션
$ exit
종료
ctrl + p + q 사용 시: 대화형 창만 빠져나오고 백그라운드에서 컨테이너는 돌게 함 (exit과 다름)
$ docker exec -it rocky-container bash
컨테이너 재기동
2. 우분투 띄워보기
$ docker pull(혹은 run) ubuntu:22.04
+ apt-get update 를 수행하여 다양한 명령어를 사용해보자
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denie d)
E: Unable to lock directory /var/lib/apt/lists/
W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Pe rmission denied)
W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
이 때 이러한 오류가 나타난다면 컴퓨터의 시간대가 맞지 않아서이므로
sudo hwclock --hctosys
다음 명령어로 호스트를 다시 시작한 후 apt-get update를 실행해주면 정상적으로 실행된다.
3. 도커 내부 아이피 배정 순서
도커는 특별한 설정이 없다면 무조건 docker0의 ip를 게이트웨이로 삼는 특성을 갖는다.
$ docker inspect 컨테이너명 | grep -i ipaddress
컨테이너들에게 배정된 내부 ip 조회
호스트 docker로도 내부 컨테이너 정보를 위와 같이 조회할 수 있으므로 굳이 컨테이너 내부적으로 ifconfig등의 부가적 기능이나 조회, 관리도구를 깔지 않아도 된다.
4. 이미지 실존 여부 확인하기
dockerhub에 접속해서 도큐먼트를 체크하여 내가 pull이나 run으로 다운받아 실행하려는 이미지가 실제로 있는 버전인지 아닌지를 파악할 수 있다.
Docker Hub Container Image Library | App Containerization
Build and Ship any Application Anywhere Docker Hub is the world's easiest way to create, manage, and deliver your team's container applications. Create your account Signing up for Docker is fast and free. Continue with GoogleContinue with GitHubContinue wi
hub.docker.com
5. alpine 버전
따라서 용량이 중요한 상황이라면 alpine 버전을 붙이는것이 이미지 크기를 줄이는 방법이다.
slim과도 유사하다.
6. nginx를 활용해 오픈 포트 확인하기
$ docker pull nginx:1.25.3-alpine
nginx 다운로드
$ docker image hisotry 방금받은이미지
이미지를 생성할 때 어떤 포트를 기반으로 돌아가게 설계했는지 확인
EXPOSE라는 구문과 함께 오픈 포트가 공개되어 있는걸 볼 수 있는데, 이는 말 그대로 방화벽에서 외부접근을 허용하기 위해 몇 번 포트를 노출시켰다는 의미이다.
컨테이너를 띄운 후
$ docker port 컨테이너명
포트바인딩 정보 조회
$ sudo netstat -nlp | grep 포트번호
호스트의 몇 번 포트가 포트바인딩에 사용되고 있는지 조회
$ ps -ef | grep 프록시번호
상세한 정보 확인
7. index.html을 생성해 nginx에 적용해보기
$ mkdir 폴더명 && cd $_
폴더 생성 후 이동
$ vi index.html
마크업 생성 후 아무거나 작성 ex) hello container
$ docker cp 파일명 컨테이너명:/usr/share/nginx/html/index.html
호스트에 작성한 파일을 nginx의 index.html로 교체. 현재 작업폴더에서 복사할 파일을 컨테이너의 해당 경로로 복사.
8. 갱신한 nginx 이미지 만들어보기
$ vi Dockerfile
도커파일 생성
FROM nginx:1.23.1-alpine # 어떤 이미지 위에 갱신할 파일을 올릴지
COPY index.html /user/share/nginx/html/index.html # 작업중인 nginx서버에 파일 갱신
EXPOSE 80 # 80번 포트 노출
CMD ["nginx", "-g", "daemon off;"] # nginx -g daemon off; 구문 실행
스크립트 작성
먼저 복사해주고 싶은 파일인 index.html과 Dockerfile이 같은 경로에 있게 둔 다음
$ docker build -t 이미지명(지정하기):버전명(지정하기) .
로컬에 이미지 설치
$ docker images
생성된 이미지 확인
docker 프로세스 살펴보기
9. MySQL 컨테이너 생성및 파라미터 전달 실습
$ docker pull mysql:5.7-debian
이미지 다운로드
$ docker run -it -e MYSQL_ROOT_PASSWORD=초기비번 mysql:5.7-debian /bin/bash
ROOT비번을 -e 옵션으로 환경변수 처리해서 넘겨줘야 작동
# cat /etc/os-release
버전 확인
# /etc/init.d/mysql start
MySQL 데몬을 기동해서 외부에서 접속가능한 상태로 만들어줌
# mysql -uroot -p
root계정의 비번을 입력해서 접속. 이전 환경변수에서 설정한 비번을 넣어주면 접속 완료.
다양한 명령어 사용 가능
이를 exit으로 빠져나와 docker run으로 실행하면 새로운 컨테이너를 만들어서
기껏 돌리고있던 컨테이너를 중지시키기 때문에
$ docker start id나컨테이너명
형식으로 재시작
$ docker exec -it 아이디나컨테이너명 bash
start로 실행한 경우 해당 인스턴스의 bash창으로 진입해야 다시 명령을 내릴 수 있음
10. 컨테이너로 띄운 DB엔진 워크벤치로 다뤄보기
$ docker run --name mariadb -e MYSQL_ROOT_PASSWORD=비번 -d \
-e MARIADB_DATABASE=item -p 3306:3306 mariadb:10.2
마리아디비를 실행하며 DB에 item이라는 DB도 같이 생성
워크벤치는 DBeaver 사용
# /etc/init.d/mysql start
마리아 DB 데몬 실행
# mysql -uroot -p
루트 계정으로 로그인
$ docker inspect mariadb | grep -i ipa
mariadb의 내부아이피 주소 찾기
이전 생성한 DB등이 있는지 조회 후 워크벤치 접속
새로운 커넥션을 생성 -> 접속 유형은 SSH -> 도커 인스턴스
내부 주소 ip 주소를 얻어내 마리아 DB 재접속
+ ssh 접속시 인증서 문제 해결 법 -> c:\users\계정명\.ssh 폴더 내부에 보면 인증서 파일 삭제
'Study > System Engineer' 카테고리의 다른 글
KDT - 도커 이미지 구조 이해 및 업로드 (0) | 2024.01.29 |
---|---|
KDT - Portainer를 이용해 GUI로 컨테이너 관리 (1) | 2024.01.29 |
KDT - 도커 설치 (1) | 2024.01.24 |
KDT - play with docker를 활용한 맛보기 (1) | 2024.01.23 |
KDT - 도커의 기반 기술과 이론적 이해 (0) | 2024.01.22 |