github과 docker hub 연동하여 도커 이미지 쉽게 만들기

Posted by HULIA(휴리아)
2017. 11. 4. 21:56 호스팅_서버_툴/도커(DOCKER)

Docker이미지를 직접 만들수도 있지만 공유되고 있는 Docker 이미지도 있습니다

바로 도커허브라는 곳에서 입니다

https://hub.docker.com/

개념은 github에 소스코드가 있듯이 도커 허브에서 도커 이미지파일들이 있습니다


도커 이미지를 만들기 위해서 Dockerfile이 필요한데 Docker파일을 github에 올려놓고 

docker hub에서는 github의 Dockerfile을 통해서 이미지를 빌드해서 올려놓을 수 있습니다


1. github에 접속해서 repository를 만들고 폴더를 만들고 Dockerfile을 만듭니다

혹시나 잘 모르는 분들은 http://istoryful.tistory.com/81 여기를 참고하여 만들면 됩니다


예) docker라는 repository만들었고 그안에 os폴더와 centos폴더를 만들었습니다

이런식으로요^^

os/centos6

os/centos7

centos/nginx

centos/node


2. docker hub에 접속해서 Create하위 메뉴의 Create automated build를 선택합니다

3. Create Auto-build github를 선택합니다

4. github와 연동할 repository를 선택합니다(저는 docker를 선택하였습니다)

그리고 이름을 선택합니다

이 이름은 docker hub의 계정뒤에 붙을 이름을 말합니다

예)istoryful/centos-utf8

이런식으로 해서 이미지를 만들때 이용할 수 있습니다


5. Docker hub의 Dashboard로 가서 만들어진 docker repository를 클릭하여 세부 화면으로 들어간 뒤 Build settings라는 메뉴로 들어갑니다


6. Trigger 옆의 + 버튼을 누르면 TAG라는 것을 추가할 수 있습니다

TAG라는 것은 이미지의 버전을 뜻하기도 합니다

Dockerfile location은 github의 Dockerfile 위치를 말하는 것이며

Docker Tag Name은 docker hub의 이미지를 가져갈때 TAG버젼을 말합니다

즉 화면과 같다면

istoryful/centos-utf8:7

istoryful/centos-utf8:6.9

를 이용해서 이미지를 가져가서 쓸수 있는 것이지요












vagrant를 이용한 centos 7에서 docker 설치하기

Posted by HULIA(휴리아)
2017. 10. 20. 18:55 호스팅_서버_툴/도커(DOCKER)

기본적으로 docker는 root권한을 필요로 한다


1. docker 설치(기본버젼)

sudo yum install docker


1.1 docker-ce 버젼 설치


sudo yum install -y yum-utils \

  device-mapper-persistent-data \

  lvm2 


sudo yum-config-manager \

    --add-repo \

    https://download.docker.com/linux/centos/docker-ce.repo 


sudo yum makecache fast


yum list docker-ce --showduplicates | sort -r 


sudo yum install docker-ce

OR

sudo yum install docker-ce-17.06.2.ce 


docker-ce 버젼 설치시 요구사항

https://docs.docker.com/engine/installation/linux/docker-ce/centos/#prerequisites


2. docker service 실행

sudo service docker start


부팅했을때 자동으로 실행

sudo chkconfig docker on


3. docker service 실행여부 확인

sudo service docker status

active라고 뜨고 enabled라고 뜨면 정상


4. docker service 종료

sudo service docker stop


5. docker version확인

sudo docker version

client와 server 두개가 나오면 정상



docker는 docker로 시작하는 명령어를 쓰는데

docker앞에 일반계정에서는 sudo를 써야하므로

root로 접속해서 docker 명령어를 쓰는게 바람직하다


6. root계정에 비번설정

sudo passwd root

root 비번 입력


7. root 계정으로 사용자변경

su root

root 비번 입력


8. docker version 확인

client와 server 두개가 나오면 정상

그럼 sudo를 안써도 됨

도커 스터디 1일차 정리

Posted by HULIA(휴리아)
2017. 10. 20. 00:02 호스팅_서버_툴/도커(DOCKER)
20171019
도커 이미지 만들기

docker images
이미지 리스트

docker ps -a(죽은 놈까지)
컨테이너 리스트

docker network ls
컨테이너의 network 종류를 보여줌

network 종류
bridge(싱글 머신에서 여러개 컨테이너 연결할때 ex)디비서버 was서버 web서버등)
overlay(물리적 머신 여러개연결) -> swarm에서 씀

docker network create 네트워크명(defaut가 bridge)
network 생성

docker network rm 네트워크명
network 삭제


docker inspect 네트워크id나이름 컨테이너names나 컨테이너id를 쓰면 자세한 내용이 나온다

생성순서(반드시는 아니다)
이미지생성->컨테이너생성
지우는 순서(반드시)
컨테이너지우고->이미지지우기(네트워크는 아무때나 지워도 된다)


docker rm -f(강제) 컨테이너id나names로해도된다(스페이스로 띄워서 여러개를 동시에 지울 수 있다)
컨테이너 종료 및 지우기
 
docker rmi -f(강제) 이미지repository+tag(latest는 default임 그러니 버젼일때는 반드시 적어줘야됨)
이미지 삭제

컨테이너 종료
docker stop 컨테이너이름

컨테이너 재시작(최초 docker run 환경 그대로)
docker restart 컨테이너이름


***************이미지의 tag가 버젼이라고 생각하면 된다


registry-local docker hub이다
registry도 컨테이너다


docker image만들기
Dockerfile(이미지 만들기 위해서 필요하다)

Dockerfile형식
FROM
ENV
RUN
ADD
COPY
VOLUME
EXPOSE
WORKDIR
CMD
ENTRYPOINT


예시


FROM dockerhub명/os명:TAG명-utf8
ENV 환경변수
RUN echo aa
ADD COPY와 비슷한데 url도 tar도 지원가능
COPY 

VOLUME 경로 
EXPOSE PORT명

ENTRYPOINT
CMD 명령어가 들어가는데 ["ECHO","AAA"] 이런식으로
ENTRYPOINT와 CMD는 비슷

ENTRYPOINT와 CMD는 컨테이너 생성할때 쓰이고 VOLUME과 EXPOSE는 알려주는 용도 나머지는 이미지 생성할때 쓰인다
ENTRYPOINT는 docker run에서 명령어로 넣은 부분을 추가적으로 인자값으로 보내줌
CMD는 docker run에서 명령어로 넣은 부분이 CMD부분을 대체된다


이미지 생성
docker build --tag 이미지이름:TAG명 .(dockerfile위치)
ex)docker build --tag mycentos:entry .


이미지를 컨테이너로 실행(컨테이너가 바로 죽음)
docker run --name 컨테이너이름(내가 만들고 싶은것) -v(위치) -p(포트) -d(백그라운드)  --network 네트워크명 -e환경변수 이미지이름:이미지TAG명 명령어
ex) docker run --name test -p 8080:8080 mycentos:7 
-p 옵션은 hostos:container 이런형식으로 쓴다


로그 보기
docker logs 컨테이너이름

이미지를 컨테이너를 실행(컨테이너가 유지됨)
docker run -d(백그라운드) --name 컨테이너이름 --tty 이미지이름:이미지TAG명 /bin/bash(쉘프롬프트)
ex)docker run -d --name test --tty mycentos:7 /bin/bash

컨테이너안으로 접속
docker exec -it 컨테이너id나names /bin/bash(쉘프로프트)
이제쓰는 컨테이너안에서 실행되는 것이네

컨테이너 접속 종료
exit


-내 이미지파일 만들때 docker hub 검색해서 만들면 된다(dockerfile)
-없으면 실제로 os에 들어가서 실제로 쳐보면 된다
-남의 이미지 쓰고 싶으면 FROM에서 쓰면 된다


docker hub(docker hub에 올리기)
-official 공식버젼
-public 이미지를 수동으로 직접 업로드
-automated build github이랑 연동해서 업로드

public으로 이미지 올릴때
docker hub에 가입을 하고(github의 계정명을 쓰게 되었다)
docker login ID랑 패스워드 침

이미지 생성할때 dockerhub계정명/이미지이름:TAG명 

docker push dockerhub계정명/이미지이름:TAG명
이러면 public으로 docker hub에 올라간다 


automated build으로 이미지 올릴때
-github에는 repository를 만들고
-dockerfile을 넣어넣고
-docker hub에서 create automated build를 통해서 생성함(github랑 연동하는 repository선택)
-docker hub의 build setting의 docker파일의 경로를 적어둠
-github에서 dockerfile을 변경하면 자동으로 docker hub에서 빌드해서 이미지를 만든다 


도커 이미지 다운만 받을때 
docker pull 이미지명:TAG



gist 설정
-github에 gitst를 등록해놓고
-raw버튼을 이용해서
-curl을 이용해서 raw버튼을 url을 치면 docker 설치(여러가지 명령어를 한번에 실행)


Vagrant이용하여 가상머신(virtual machine)을 쉽게 관리하자

Posted by HULIA(휴리아)
2017. 10. 19. 23:59 호스팅_서버_툴/도커(DOCKER)

가상머신(Virtual machine)이란

VMWare, Virtual Box, Hyper-V와 같은 가상화를 지원해 주는 시스템을 말한다

가상머신을 설치하면 가상의 컴퓨터가 만들어졌다고 생각하면 되며 그안에 OS를 설치하고 OS에 돌아가는 프로그램을 설치할 수 있다

즉 하나의 운영체제에서 여러가지 OS를 경험하고 싶을때 쓰면 좋다


Vagrant란

경량화된 버젼머신(Virtual machine)관리 서비스이다

이말은 일일이 OS를 설치하지 않고 단순히 이미지 형태로 OS를 설치할 수 있다는 것을 말한다
그래서 Vagrant를 이용하기 위해서는 가상머신이 설치되어 있어야 한다(위 3가지 종류 중에 하나를 설치해야 한다)
참고로 default는 virtual box이다

Virtual Box 설치(추천)

Vmware 설치(비추)
https://www.vmware.com/kr/try-vmware.html

Hyper-V 설치(윈도우 전용-비추)
https://docs.microsoft.com/ko-kr/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v



1. Vagrant 설치



2. Vagrant 저장소를 만들 디렉토리 생성


3. Box 다운로드 및 vagrant에 box 등록(Box는 기본설정과 OS가 설치된 가상머신 템플릿 이미지이다)


공식 Box리스트

https://app.vagrantup.com/boxes/search


서드파티 Box리스트

http://www.vagrantbox.es/


box를 vagrant에 등록

vagrant box add [title] [download-url]

ex)vagrant box add bento/centos-7.2

ex)vagrant box add bento/centos-6.7

ex)vagrant box add centos64 https://github.com/2creatives/vagrant-centos/releases/download/v6.4.2/centos64-x86_64-20140116.box

ex)vagrant box add centos65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box


ex)vagrant box add ubuntuapm  https://dl.dropbox.com/u/14741389/vagrantboxes/lucid64-lamp.box


box가 vagrant에 잘 등록되었는지 확인

vagrant box list


4. vagrant init [box등록시 사용한 title명]

vagrant init [title]

ex)vagrant init centos64

ex)vagrant init ubuntuapm


5. 가상머신 기동

vagrant up


6. 가상머신 안으로 접속

vagrant ssh

or

터미널 프로그램에서 127.0.0.1:2222로 vagrant(아이디)/vagrant(비번)로 접속가능함


7. 가상머신 정지

vagrant halt


8. 중지 후 디렉토리 clean

vagrant destroy


9. Vagrantfile 의 설정 변경을 적용하기 위한 명령어

vagrant reload


10. 외부에서 vm에서 구동되고 있는 웹 서버에 접속이 가능하게 함

vagrant share


11.  버전 확인

vagrant -v 







docker 개념정리

Posted by HULIA(휴리아)
2017. 10. 17. 20:25 호스팅_서버_툴/도커(DOCKER)

Docker란

컨테이너 기반(프로세스)의 오픈소스 가상화 플랫폼(OS가상화와 조금은 다른 개념)

 

Docker의 주요 개념

-컨테이너

-도커이미지

-오버레이 네트워크

-유니온 파일 시스템

 

도커이미지란

컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않음

 

도커이미지 관리

-URL방식으로 태그를 붙일 수 있음

-docker.io/library/ubuntu:14.04(public)

-my.private.image:5000/hello-app:123(private)

 

컨테이너란

도커이미지를 실행한 상태, 추가되거나 변하는 값은 컨테이너에 저장

 

도커이미지와 컨테이너관계

도커이미지에서 여러개의 컨테이너를 생성가능

컨테이너의 상태가 바뀌거나 삭제되어도 도커이미지는 변하지 않고 그대로 남아있음

 

도커이미지 배포서버

-docker hub(public)

-docker registry(private)

 

도커 이미지 만들기

-dockerfile 이용

-예시

# vertx/vertx3 debian version
FROM subicura/vertx3:3.3.1
MAINTAINER chungsub.kim@purpleworks.co.kr

ADD build/distributions/app-3.3.1.tar /
ADD config.template.json /app-3.3.1/bin/config.json
ADD docker/script/start.sh /usr/local/bin/
RUN ln -s /usr/local/bin/start.sh /start.sh

EXPOSE 8080
EXPOSE 7000

CMD ["start.sh"]

 

 

도커설치(윈도우)

 

윈도우용 설치 조건

-Windows 10 Enterprise, Professional 또는 Education

-두 번째 수준 주소 변환(SLAT)을 사용하는 64비트 프로세서.

-VM 모니터 모드 확장(Intel CPU의 VT-c)을 지원하는 CPU.

-최소 4GB의 메모리


 

[명령어]

1.도커버젼 확인

docker version

client와 server정보가 출력되면 설치 완료

 

2. 컨테이너 실행하기(이미지가 저장되었는지 확인하고 없다면 다운로드 한후 컨테이너를 생성하고 시작함)

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

ex) docker run ubuntu:16.04 -> 뭘 하라는 명령어를 주지 않았기 때문에 컨테이너는 생성되자마자 종료됨

 

ex) docker run --rm -it ubuntu:16.04 /bin/bash -> 컨테이너내부의 명령어 프롬프트 띄우기

cat /etc/isssue입력

ls입력

exit로 빠져나옴

 

-it 옵션은 키보드 입력

--rm 프로세스가 종료되면 컨테이너가 자동으로 삭제

 

ex) docker run -d -p 1234:6379 redis

-d 옵션은 background로 실행되도록 하는 것

-p 옵션은 컨테이너 포트를 호스트의 포트로 연결

호스트의 1234 포트를 컨테이너의 6379포트로 연결

 

telnet localhost 1234 입력

ctrl + c

 

 

ex) docker run -d -p 3306:3306 \
  -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
  --name mysql \
  mysql:5.7

 

-e 환경변수(mysql docker hub에 여러가지 환경변수 있음)

--name 옵션을 이용하여 컨테이너에 읽기 어려운 ID대신 쉬운 이름을 부여할 예정

--name 생략하면 도커가 자동으로 이름을 지어줍니다

 

mysql -h127.0.0.1 -uroot 입력

show databases; 입력

 

3. 컨테이너 목록 확인

docker ps [OPTIONS]

ex)docker ps -a

 

4. 컨테이너 중지하기

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

ex) docker stop ${TENSORFLOW_CONTAINER_ID}

 

***도커 ID의 전체 길이는 64자리 입니다. 하지만 명령어의 인자로 전달할 때는 전부 입력하지 않아도 됩니다. 예를 들어 ID가 abcdefgh...라면 abcd만 입력해도 됩니다. 앞부분이 겹치지 않는다면 1-2자만 입력해도 됩니다.

 

5. 컨테이너 제거하기

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

ex)docker rm ${UBUNTU_CONTAINER_ID} ${TENSORFLOW_CONTAINER_ID}

ex)docker rm -v $(docker ps -a -q -f status=exited)  한번에 삭제

 

6. 도커 이미지 목록 확인하기

docker images [OPTIONS] [REPOSITORY[:TAG]]

ex) docker images

 

7. 도커 이미지 다운

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

ex) docker pull ubuntu:14.04

 

8. 도커 이미지 삭제

docker rmi [OPTIONS] IMAGE [IMAGE...]

ex)docker images # get image ID
docker rmi ${TENSORFLOW_IMAGE_ID}

 

9. 컨테이너 로그 보기

docker logs [OPTIONS] CONTAINER

ex) docker logs ${WORDPRESS_CONTAINER_ID}

ex) docker logs --tail 10 ${WORDPRESS_CONTAINER_ID}  마지막 10줄

ex) docker logs -f ${WORDPRESS_CONTAINER_ID}   실시간

 

10. 컨테이너에서 실행

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

run명령어는 새로 컨테이너를 만들어서 실행하고

exec는 실행중인 컨테이너에 명령어를 내리는 것이 다름

 

ex) docker exec -it mysql /bin/bash

ex) docker exec -it mysql mysql -uroot

 

 

도커 컨테이너를 업데이트

-새버전의 이미지를 다운(pull) 기존컨테이너를 삭제(stop, rm) 새 이미지를 기반으로 새 컨테이너를 실행(run) 하면 됨

 

컨테이너 삭제시 유지해야 되는 데이터 보관

-클라우드 서비스(아마존 S3)

-데이터 볼륨(호스트의 디렉토리에 마운트)

ex)docker run -d -p 3306:3306 \
  -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
  --name mysql \
  -v /my/own/datadir:/var/lib/mysql \ # <- volume mount
  mysql:5.7

- >호스트의 /my/own/datadir디렉토리를 컨테이너의 /var/lib/mysql디렉토리로 마운트 하였습니다. 이제 데이터베이스 파일은 호스트의 /my/own/datadir디렉토리에 저장되고 컨테이너를 삭제해도 데이터는 사라지지 않습니다.

 

 

Docker compose

도커는 복잡한 설정을 쉽게 관리하기 위해 YAML방식의 설정파일을 이용한 docker compse라는 툴을 제공함

docker를 설치하면 깁노적으로 설치되어있음

 

docker-compose version 으로 버젼확인

 

overlay network

http://naver.me/FnTD925p
오버레이 네트워크의 중요한 처리(상자에 넣어 라벨을 붙이는 처리)를 ‘캡슐화’라고 합니다. 이 장치의 경우, 캡슐화라는 처리를 해서 캡슐로부터 내용을 꺼내 보낼 곳으로 데이터를 보내는 작업을 하거나, 누가 어떤 공장에 있는지를 작업자 Y씨나 Z 씨에게 적절히 알려주는 역할(기능)이 필요합니다. 사실 요즘은 Hyper-V 등과 같은 서버 가상화가 그 역할을 담당할 수 있게 되어 있습니다.

즉, 지금까지 라우터나 스위치 등과 같은 물리 네트워크 기기가 담당하던 처리의 일부를 서버 가상화가 담당해주는 것입니다. 이로써 네트워크 사이에 데이터를 보내는 물리적인 네트워크 기기의 종류에 구애받지 않게 됩니다. 따라서 싼 가격에 심플한 기기를 잘 활용할 수 있으면 ‘비교적 비싸다’라고 여겨지는 네트워크 기기의 비용을 줄일 수 있습니다.