人生襍多

docker를 초급 사용기 본문

IT 유용한 TIP

docker를 초급 사용기

이혁진 2019. 4. 12. 01:26

 

1. docker 설치 및 부가 세팅

 

$ curl -fsSL https://get.docker.com/ | sudo sh

또는

$ sudo apt-get install docker.io

 

설치 완료 후 설치 내용 확인

$ sudo docker version

 

docker는 기본적으로 root권한으로 실행되는데, 사용자 레벨에서 docker를 실행하려면,

 

$ sudo usermod -aG docker ${USER}

<- 사용자에게 docker 그룹 설정

$ sudo service docker restart

<- docker 서비스를 재시작하고

$ 현재 계정에서 로그아웃한 뒤 다시 로그인합니다.

 

2. docker 기본 명령어

 

도커를 실행 기본 명령어는

## docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

 

옵션 설명

-d detached mode 흔히 말하는 백그라운드 모드

-p 호스트와 컨테이너의 포트를 연결 (포워딩)

-v 호스트와 컨테이너의 디렉토리를 연결 (마운트)

-e 컨테이너 내에서 사용할 환경변수 설정

--name 컨테이너 이름 설정

--rm 프로세스 종료시 컨테이너 자동 제거

-it -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션

–link 컨테이너 연결 [컨테이너명:별칭]

 

기타 명령하는 실제 활용해가면서 알아봅니다.

 

3. docker로 ubuntu:16.04 이미지 설치

 

$ docker run --rm -it --name testu ubuntu:16.04

<- run 명령어를 통해, ubuntu:16.04 라는 이미지명:태그 저장되어 있는지 확인후 다운로드(pull)를 한 후 컨테이너를 생성(create)하고 시작(start) 됩니다.

 

설치다 되면 자동으로 생성된 컨테이너에 터미널에 접속이 됩니다.

간단히 위 그림과 같이 exit 로 빠져 나오면 됩니다.

 

<- --rm 옵션은 exit로 빠져 나옴과 동시에 컨테이너 자동 제거되는 옵션

<- --name 컨테이너 별칭 이름 설정 (위 예제에는 testu라고 명명 하였습니다.)

<- -it 옵션을 써야 컨테이너의 터미널 입력이 가능합니다.

 

이미지 설치 확인

 

$ docker images

 

<- 설치된 이미지들이 나온다.

 

설치된 이미지로 컨테이너 실행을 다시 해봅니다.

 

$ docker run -it --name testu ubuntu:16.04

 

역시 exit로 나와 주고

실행 또는 대기중인 컨테이너 목록 보기

 

$ docker ps -a

 

실행 중 인 컨테이너 멈추기

 

## docker stop [OPTIONS] CONTAINER [CONTAINER...]

<- $ docker ps -a 에서 확인한 컨테이너ID 또는 컨테이너 이름 (본 예제에서는 testu 네요) 을 적으면 됩니다.

<- 컨테이너 ID는 앞의 몇글자만 적어도 됩니다.  

 

$ docker stop testu



컨테이너 제거는...

 

## docker rm [OPTIONS] CONTAINER [CONTAINER...]

$ docker rm testu

 

하나 팁이

$ docker rm -v $(docker ps -a -q -f status=exited)  

<- 사용이 중지된 컨테이너를 전체를 지워 줍니다.



컨테이너의 로그를 Host에 볼려면....

 

## docker logs [OPTIONS] CONTAINER

 

$ docker logs --tail 10 testu

또는

$ docker logs -f testu

<- 이렇게 하면 실시간으로 나옵니다.

 

설치된 이미지 삭제는 $ docker images 에서 확인 이미지명:태그 를 이용하여 삭제 합니다.

 

$ docker rmi ubuntu:16.04

 

컨테이너에 명령어를 실행시키는 방법은.....

 

## docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

 

$ docker exec -it testu /bin/bash

<- testu라는 컨테이너에서 bash를 실행

 

또는

 

$ docker attach testu  

 

으로해도 됩니다.

 

기타로...

 

## docker stop CONTAINER명

## docker start CONTAINER명

## docker inspect CONTAINER명 은 이미지와 컨테이너의 세부 정보를 출력합니다.

## sudo docker cp CONTAINER명:/etc/hosts ./  는 컨테이너의 파일을 ./ 경로로 복사합니다.



4. mysql 설치

 

간단한듯 하나, 문제가 하나 있습니다.

 

docker에서 컨테이너를 종료하고(docker stop CONTAINER명), 삭제하면(docker rm CONTAINER명) 컨테이너에서 생성된 파일이 사라집니다. 즉, mysql컨테이너에서 데이터를 다루로 컨테이너를 삭제하면 mysql에 저장된 내용이 사라진다는 이야기입니다.

 

이러한 데이터 삭제 방지를 두가지 방법으로 해결할수 있는데,

 

- 삭제전에 새로운 이미지로 생성

 

## docker commit <옵션> <컨테이너 이름> <이미지 이름>:<태그>

 

$ docker commit testu ubuntutest:16.04   

<- 이와 같이 하면, testu 컨테이너에서 작업하던 내용을 그대로 이미지화 시킬수 있습니다.

 

하나 이 방법은 mysql 처럼 실시간 트렌젝션에 맞지 않습니다.  

 

- 데이터 볼륨을 사용하는 방법을 활용

 

이 방법으로 mysql 컨테이너를 실행해봅니다

 

우선 호스트 PC에서 적절한 폴더를 하나 생성해 줍니다. /home/dockerdata/mysql 이라고 해봅니다.

 

그리고 mysql 이미지를 설치 합니다.

 

$ docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=적절한암호 --name mysqltest -v /home/dockerdata/mysql:/var/lib/mysql mysql:8.0

 

<-- 핵심은 -v /home/dockerdata/mysql:/var/lib/mysql 으로 컨테이너의 /var/lib/mysql를 /home/dockerdata/mysql 에거 마운트 하면서 컨테이너를 올린다는 이야기 입니다.



** 예외처리

 

호스트에서 컨테이너의 mysql에 접근하는 방법은

 

$ mysql -h127.0.0.1 -uroot -p적절한암호

당연히 mysql-client 프로그램은 설치해주어야 합니다. ;; 

 

인데 이런 에러가 뜨는 경우에는  

 

ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/x86_64-linux-gnu/mariadb18/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

 

우선 이렇게 해봅니다.

 

$ docker exec -it mysqltest bash

 

<- 이렇게 하면 컨테이너 콘솔에 들어간다.

 

컨테이너# mysql -uroot -p적절한암호

 

mysql > ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '적절한암호';

 

으로 해결할수 있습니다.

 

------------

 

https://hub.docker.com/

 

이미지 검색
Docker 이미지는 다음 명령어를 이용해서 검색할 수 있습니다.

$ docker search <image name> ex) docker search ubuntu

 

이미지 다운로드
pull 명령어를 이용해서 원하는 이미지를 다운로드할 수 있습니다. 이미지 이름 뒤의 <tag>를 이용하여 원하는 버전의 이미지를 다운로드할 수 있으며, 생략할 경우 기본값으로 latest 태그가 입력됩니다.

$ docker pull <image name>:<tag> ex) docker pull ubuntu

또는 run 명령어를 이용해서 원하는 이미지를 다운로드하면서 해당 이미지의 컨테이너를 실행할 수 있습니다. run 명령어는 로컬에 이미지가 있을 경우 해당 이미지로부터 컨테이너를 생성하며, 로컬에 이미지가 없을 경우 이미지를 다운로드합니다.

$ docker run -i -t --name <container name> <image name> ex) docker run -i -t --name hello ubuntu

 

이미지 리스트 조회
docker images 명령어를 이용해서 로컬에 설치된 이미지 리스트를 확인할 수 있습니다.

$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 0458a4468cbc 10 days ago 112MB hello-world latest f2a91732366c 2 months ago 1.85kB

 

이미지 삭제
이미지 삭제는 rmi 명령어를 이용합니다.

$ docker rmi <image name>:<tag> ex) docker rmi ubuntu:latest



출처: https://cardin.tistory.com/entry/docker-이미지-백업-방법 [人生襍多]

Comments