개발자의 스터디 노트
Docker 명령어 정리 본문
도커 명령어 모음집
docker version
- 도커 버전 확인
*********************** 컨테이너를 생성하고 실행하는 명령어 ***********************
docker pull(docker image pull)
- docker 이미지를 다운로드
docker create(docker container create)
- docker 이미지 생성
docker start(docker container start)
- docker 컨테이너 실행
docker run(docker container run)
- pull create start 를 합친것과 같은 명령어
- 이미지가 없다면 우선 이미지를 내려받는다.
docker run <옵션> 이미지 <인자>
- 주요 옵션
--name 컨테이너 이름 : 컨테이너 이름을 지정함
-p 호스트_포트번호:컨테이너_포트번호 : 포트 번호를 포워딩
-v 호스트_디스크:컨테이너_디렉토리 : 볼륨을 마운트함
--net=네트워크_이름 : 컨테이너를 네트워크에 연결함
-e 환경변수_이름=값 : 환경변수를 설정함
-d : 백그라운드로 실행함
-i : 컨테이너에 터미널(키보드)을 연결함
-t : 특수키를 사용 가능하도록 함
-help : 사용방법 안내 메시지를 출력함
*********************** 컨테이너를 정지하는 명령어 ***********************
docker stop 컨테이너_이름
*********************** 컨테이너를 삭제하는 명령어 ***********************
docker rm 컨테이너_이름
*********************** 컨테이너 목록 출력하는 명령어 ***********************
docker ps (옵션)
docker ps : 실행중인 컨테이너의 목록 출력
docker ps -a : 현재 존재하는 컨테이너의 목록 출력
CONTAINER ID : 컨테이너 식별자. 무작위 문자열이 할당된다. 본래는 64글자이지만 앞에서부터 12글자만 출력한다. 이 12글자만으로도 식별자 역할을 수행할 수 있다.
IMAGE : 컨테이너를 만들 때 사용한 이미지의 이름
COMMAND : 컨테이너 실행 시에 실행하도록 설정된 프로그램의 이름.
CREATED : 컨테이너 생성 후 경과된 시간
STATUS : 컨테이너의 현재 상태. 실행중이라면 'Up' 종료된 상태라면 'Exited'가 출력된다.
PORTS : 컨테이너에 할당된 포트 번호. '호스트 포트 번호 -> 컨테이너 포트 번호' 형식으로 출력된다. 포트번호가 동일할 경우 -> 의 뒷부분은 출력되지 않는다.
NAMES : 컨테이너 이름
*********************** 컨테이너를 생성하고 실행, 상태 확인, 종료, 삭제 실습 ***********************
docker run --name apa000ex1 -d httpd
--name apa000ex1 : apa000ex1 이라는 이름으로 컨테이너 생성
-d : 백그라운드로 실행
httpd : 아파치의 이미지 이름 버전을 지정하지 않았으므로 가장 최신 버전(latest)이 사용된다.
docker ps
실행중인 컨테이너 목록 확인
docker ps -a
모든 컨테이너 목록 확인
docker stop apa000ex1
apa000ex1 이름의 컨테이너 중지
docker rm apa000ex1
apa000ex1 이름의 컨테이너 삭제
docker run --name apa000ex2 -d -p 8080:80 httpd
- apa000ex2라는 이름의 컨테이너를 백그라운드로(-d) 포트는 8080을 컨테이너 80에 포트 포워딩해서(-p) httpd 이미지를 실행시킨다.
docker stop apa000ex2
- apa000ex2 라는 이름의 컨테이너를 중지 한다.
*********************** mysql 컨테이너 생성 및 실행 ***********************
docker run --name mysql000ex7 -dit -e MYSQL_ROOT_PASSWORD=myrootpass mysql
--net : 네트워크 이름
--name : mysql000ex7이라는 이름의 컨테이너 생성
-dit : 백그라운드에서 실행 및 키보드를 통해서 컨테이너 내부의 파일시스템조작
-e MYSQL_ROOT_PASSWORD= : MySQL의 루트 패스워드 지정
-e MYSQL_DATABASE= : 데이터베이스 이름
-e MYSQL_USER : MySQL= : 사용자 이름
-e MYSQL_PASSWORD= : MySQL 패스워드
--character-set-server= : 문자인코딩 (문자 인코딩으로 UTF8을 사용)
--collation-server= : 정렬순서 (정렬 순서로 UTF8을 따름)
--default-authentication-plugin= : 인증방식을 예전방식(native)으로 변경
mysql : mysql 이미지 이름. 버전을 지정하지 않았으므로 최신 버전이 사용된다.
*********************** 워드프레스 컨테이너 생성 및 실행 ***********************
docker run
--name 컨테이너_이름
-dit
--net=네트워크_이름
-p 포트_설정
-e WORDPRESS_DB_HOST=데이터베이스_컨테이너_이름
-e WORDPRESS_DB_NAME=데이터베이스_이름
-e WORDPRESS_DB_USER=데이터베이스_사용자_이름
-e WORDPRESS_DB_PASSWORD=데이터베이스_패스워드
wordpress
*********************** 도커 네트워크 생성 ***********************
docker network create <네트워크 이름>
docker network rm <네트워크 이름>
그외 하위 커맨드
connect : 네트워크에 컨테이너를 새로이 접속
disconnect : 네트워크에서 컨테이너의 접속을 끊음
create : 네트워크를 생성
inspect : 네트워크의 상세 정보를 확인
ls : 네트워크의 목록을 확인
prune : 현재 아무 컨테이너도 접속하지 않은 네트워크를 모두 삭제
rm : 지정한 네트워크를 삭제
*********************** docker 이미지 출력 ***********************
docker image ls
docker images
*********************** docker 이미지 삭제 ***********************
docker image rm <이미지 이름>
docker image rm <이미지 이름> <이미지 이름>
*********************** 네트워크 생성 & 워드프레스 & MySQL ***********************
docker network create wordpress000net1
: wordpress000net1 이름의 네트워크 생성
docker run --name mysql000ex11 -dit --net=wordpress000net1 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress000db -e MYSQL_USER=wordpress000kun -e MYSQL_PASSWORD=wkunpass mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
: mysql 컨테이너 생성 실행
docker run --name wordpress000ex12 -dit --net=wordpress000net1 -p 8085:80 -e WORDPRESS_DB_HOST=mysql000ex11 -e WORDPRESS_DB_NAME=wordpress000db -e WORDPRESS_DB_USER=wordpress000kun -e WORDPRESS_DB_PASSWORD=wkunpass wordpress
*********************** docker 파일 복사 ***********************
* 로컬에서 컨테이너로
docker cp 로컬파일경로 이미지이름:컨테이너경로
* 컨테이너에서 로컬로
docker cp 이미지이름:컨테이너경로 로컬파일경로
*********************** docker 바인드 마운트 ***********************
docker run --name apa000ex20 -d -p 8090:80 -v /home/parkwooseok/temp/apa_folder:/usr/local/apache2/htdocs httpd
-v 마운트할 로컬 경로:마운트로 붙일 컨테이너 경로
*********************** docker 볼륨 마운트 ***********************
볼륨 생성
docker volume create apa000vol1
볼륨 상세 정보 확인
docker volume inspect apa000vol1
볼륨 삭제
docker volume rm apa000vol1
볼륨마운트
docker run --name apa000ex21 -d -p 8091:80 -v apa000vol1:/usr/local/apache2/htdocs httpd
컨테이너 마운트 확인
docker container inspect apa000ex21
`
*********************** 컨테이너로 이미지 만들기 ***********************
** commit 사용하기
docker commit 컨테이너_이름 새로운_컨테이너_이름
** Dockerfile 스크립트로 이미지 만들기
docker build -t 생성할_이미지_이름 재료_폴더_경로
주요 Dockerfile 인스트럭션
FROM : 토대가 되는 이미지를 지정
ADD : 이미지에 파일이나 폴더를 추가
COPY : 이미지에 파일이나 폴더를 추가
RUN : 이미지를 빌드할 때 실행할 명령어를 지정
CMD : 컨테이너를 실행할 때 실행할 명령어를 지정
ENTRYPOINT : 컨테이너를 실행할 때 실행할 명령어를 강제 지정
ONBUILD : 이 이미지를 기반으로 다른 이미지를 빌드할 때 실행할 명령어를 지정
EXPOSE : 이미지가 통신에 사용할 포트를 명시적으로 지정
VOLUME : 퍼시스턴시 데이터를 저장할 경로를 명시적으로 지정
ENV : 환경변수를 정의
WORKDIR : RUN, CMD, ENTRYPOINT, ADD, COPY에 정의된 명령어를 실행하는 작업 디렉터리를 지정
SHELL : 빌드 시 사용할 셸을 변경
LABEL : 이름이나 버전, 저작자 정보를 설정
USER : RUN, CMD, ENTRYPOINT에 정의된 명령어를 실행하는 사용자 또는 그룹을 지정
ARG : docker build 커맨드를 사용할 때 입력받을 수 있는 인자를 선언
STOPSIGNAL : docker stop 커맨드를 사용할 때 컨테이너 안에서 실행 중인 프로그램에 전달되는 시그널을 변경
HEALTHCHECK : 컨테이너 헬스체크 방법을 커스터마이징
1. Dockerfile 생성
/home/parkwooseok/temp/apa_folder/vi Dockerfile
FROM httpd
COPY index.html /usr/local/apache2/htdocs
2. Dockerfile을 기반으로 이미지 생성
docker build -t ex22_original2 /home/parkwooseok/temp/apa_folder
3. 이미지를 파일로 저장
docker save -o ex22_original2.tar ex22_original2
*********************** 컨테이너로 내부 수정하기 ***********************
docker exec (옵션) 컨테이너_이름 /bin/bash
docker run (옵션) 컨테이너_이름 /bin/bash
run에 /bin/bash 를 추가하면 해당 컨테이너에서 메인으로 실행해야 되는 명령이 실행되지 않고 bash가 실행 된다.
ex)
docker exec -it apa000ex23 /bin/bash
docker run --name apa000ex23 -it -p 8089:80 httpd /bin/bash
*컨테이너 밖으로 나가기
exit
'클라우드' 카테고리의 다른 글
EKS 구축에 사용하는 도구 (0) | 2022.04.30 |
---|---|
AWS 서비스 용어 (0) | 2022.04.29 |
Amazon EKS가 무엇인가요? (0) | 2022.04.28 |
컨테이너, 도커, 쿠버네티스 (0) | 2022.04.27 |