
본 게시물은 스스로의 공부를 위한 글입니다.
틀린 내용이 있을 수 있습니다.
curl -s https://get.docker.com/ | sudo sh //리눅스 배포판에 따라 자동으로 최신버전 도커 설치
sudo usermod -aG docker ubuntu //ubuntu 유저 권한 추가
docker version우리가 스마트폰에서 app store에서 program을 다운로드 후 process를 실행하는 것처럼, 도커는 docker hub에서 image을 다운로드 받아 container로 실행한다.
이때 docker hub에서 image를 다운로드 하는것을 pull이라 하고, image를 contatiner로 실행하는 것을 run이라 한다.
run 명령어를 사용하면 사용할 이미지가 저장되어 있는지 확인하고 없다면 다운로드(pull) 한 후 컨테이너를 생성(create)하고 시작(start)한다.
도커 컨테이너 실행
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
-d:  detached mode (백그라운드 모드)-p [hostPort]:[ContainerPort] :  호스트와 컨테이너의 포트를 연결-v: 호스트와 컨테이너의 디렉토리를 연결-e 컨테이너 내에서 사용할 환경변수 설정--name 컨테이너 이름 설정--rm 프로세스 종료시 컨테이너 자동 제거-it -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션--network 네트워크 연결예제를 통해 설치와 실행 방법에 대해 알아보자
docker pull httpd을 볼 수 있다.docker pull httpd 입력 -> 이미지가 다운로드 된다.docker images를 통해 현재 도커에 설치되어 있는 이미지들 확인TAG = 이미지 버전,   IMAGE ID = 이미지 식별자docker run httpd를 통해 container로 실행docker run --name [컨테이너이름] httpd를 통해 컨테이너에 이름 붙여주기 가능docker ps를 통해 현재 실행중인 container 확인CONTAINER ID 또는 NAMES를 확인해두자docker stop [CONTAINER ID] 또는 docker stop [NAMES]를 통해 실행 중인 컨테이너 중지docker ps -a를 통해 중지된 컨테이너도 모두 확인 가능하다. docker start [NAMES]를 통해 가능docker logs -f [names]docker rm [names] 입력docker stop을 통해 중지시킨 후 삭제해야 한다.docker rm --force [names]를 통해 가능docker rmi [REPOSITORY]를 통해 가능docker run ubuntu:20.04docker run --rm -it ubuntu:20.04 /bin/sh   //우분투 설치 및 bash 실행
docker run --rm -it centos:8 /bin/sh       //centOs 설치 및 셸 실행
컨테이너 내부에 들어가기 위해 sh를 실행하고, 키보드 입력을 위해 -it옵션을 줬다.
--rm 옵션이 없다면 컨테이너가 종료되더라도 삭제되지 않고 남아 있어 수동으로 삭제해야 한다.
exit를 하면 종료된다.
docker run --rm -p 5678:5678 hashicorp/http-echo -text="hello world"
-text 뒤 문자열을 그대로 출력해줌-p 5678:5678 ~ 내 pc의 5678포트가 컨테이너의 5678포트로 연결localhost:5678에 접속하면 메시지를 볼 수 있다.docker run -d -p 3306:3306 \
  -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
  --name mysql \
  mysql:5.7
-d : 백그라운드로 실행을 해서 로그가 안보임-e MYSQL_ALLOW_EMPTY_PASSWORD=true :  비밀번호 입력을 안하겠다. --name mysql : 이름 설정exec: 현재 구동 중인 컨테이너에 접속(백그라운드 실행 컨테이너 내부 접속)docker exec -it mysql mysql
docker ps : 현재 실행중인 컨테이너 확인docker ps -a : 중지된 컨테이너도 확인하려면 -a옵션docker stop [options] container [container...]--name으로 지정된 이름을  입력한다.docker rm [options] container [container..] 종료된 컨테이너를 완전히 제거docker logs [options] container [container] 컨테이너가 정상적으로 동작하는지 확인하는 좋은 방법은 로그를 확인하는 것이다.-f 계속 대기하면서 새로 생기는 로그들도 보여준다. Ctrl + P, Q 컨테이너 정지하지 않고 빠져나오기docker rename [변경전컨테이너이름] [변경후컨테이너이름] 컨테이너 이름 변경docker images [options] [repository[:tag]] 도커가 다운로드한 이미지 목록을 보여줌
docker pull [options] name[:tag|@digest] 이미지를 다운로드
docker run ~했을 때, 이미지 파일이 없다면 자동으로 pull한다.docker rmi [options] image [image...] 이미지id를 입력하면 이미지삭제가 된다. 단, 컨테이너가 실행중인 이미지는 삭제되지 않는다.
docker network create [options] networkName 도커 컨테이너끼리 이름으로 통신할 수 있는 가상 네트워크를 만든다.
docker network connect [options] networkName container 기존에 생성된 컨테이너에 네트워크를 추가한다.
예제 - mysql과 wordpress를 한 네트워크에 묶기
docker network create app-network //네트워크를 만들고
docker network connect app-network mysql //--name mysql로 만든 컨테이너를 네트워크에 속하게하기
 //워드프레스를 네트워크에 속하게 하고 mysql을 이름으로 접근한다.
docker run -d -p 8080:80 \
 --network=app-network \
 -e WORDPRESS_DB_HOST=mysql \
 -e WORDPRESS_DB_NAME=wp \
 -e WORDPRESS_DB_USER=wp \
 -e WORDPRESS_DB_PASSWORD=wp \ 
 wordpress
 -v 호스트경로:컨테이너내부경로 호스트와 컨테이너 디렉터리를 연결해준다.
즉, 앱 데이터를 유지할 수 있는 옵션
컨테이너를 rm으로 지우면 데이터도 함께 삭제된다.
하지만 run할때 -v옵션을 주면 삭제 후 다시 설치해도 그 폴더로 다시 연결되기 때문에 데이터를 복구할 수 있다.
도커툴박스는 가상머신을 이용하기 때문에 로컬경로에는 보이지 않는다. 경로를 만든 경우 가상머신에 생성이 된다.
  docker run -d -p 3306:3306 \
    -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
    --network=app-network \
    --name mysql \
    -v /my/own/datadir:/var/lib/mysql \
    mysql:5.7