도커 컨테이너 종료 

$ docker stop 컨테이너id

 

도커 컨테이너 실행 

$docker exec 컨테이너id

 

실행중인 컨테이너 확인
$docker ps

 

전체 컨테이너 확인
$docker ps -a

 

컨테이너 삭제
$docker rm 컨테이너id

 

도커 이미지 확인
$docker images

 

도커 이미지 지우기
$docker rmi 이미지id

 

컨테이너 삭제, 이미지 삭제 동시
$docker rmi -f 이미지id

 

참고: https://brunch.co.kr/@hopeless/10

Docker-02

컨테이너 기반 가상화 플랫폼 도커의 이해 2강

Mac 에서는 xhyve, Window에서는 Hyper-V 로 사용

Docker Meetup 9/17/14  Docker Client, Server, and Containers  client server  docker run ... docker -d  init  grandchild  G...

https://www.slideshare.net/SaiedKazemi/lpc-docker-container-cr-with-criu

client-server

//1. client
$docker run ~~~~ 


//2. host
$docker daemon

//3. client (output)
$output

Run Command

옵션 설명
-d Detached mode 백그라운드모드
-p 호스트와 컨테이너의 포트를 연결(포트 포워딩)
예제) localport: hostport
-v 호스트와 컨테이너의 디렉토리를 연결(마운트)
-e 컨테이너 내에서 사용할 환경 변수 설정
예제) -e PARAM_NAME test
--name 컨테이너 이름
--rm 프로세스 종료시 컨테이너 자동 제거
-it -i 와 -t를 동시에 사용한것으로 터미널입력을 위한 옵션
--network 네트워크 연결

컨테이너 실행

CentOs 실행

$docker run centos:7
Unable to find image 'centos:7' locally
7: Pulling from library/centos
d8d02d457314: Pull complete
Digest: sha256:307835c385f656ec2e2fec602cf093224173c51119bbebd602c53c3653a3d6eb
Status: Downloaded newer image for centos:7

이미지 파일이 있으면 실행하고 없으면 pull 로 이미지를 받아온뒤 centos:7 이미지 를 실행

bash 접속

$docker run --rm -it centos:7 /bin/bash
[root@7bead8a2b28b /]#ls
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                etc  lib   media  opt  root  sbin  sys  usr

--it : 터미널로 입력을 하겠다는 의믜 (input terminal 인가??)

--rm : 터미널종료가 되면 컨테이너가 자동으로 종료됨

Redis

메모리에 key value를 사용하여 쓸수있는 메모리

$docker run --name=kdy_redis -d -p 1234:6379 redis
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
1ab2bdfe9778: Pull complete
966bc436cc8b: Pull complete
c1b01f4f76d9: Pull complete
8a9a85c968a2: Pull complete
8e4f9890211f: Pull complete
93e8c2071125: Pull complete
Digest: sha256:9755880356c4ced4ff7745bafe620f0b63dd17747caedba72504ef7bac882089
Status: Downloaded newer image for redis:latest
747b5ec128b3c79e54a1e7e1b49bdf9fe06542fa2dcc1824038812149da491cf
$

실행은 됬는데

텔넷으로 접속 redis

redis접속 하기 위해서 다시 telnet이미지 설치

별도로 설치 하지않고 이미지를 사용해서 command 라인 프로그램 사용 가능

$docker run --rm -it mikesplain/telnet docker.for.mac.localhost 1234

Unable to find image 'mikesplain/telnet:latest' locally
latest: Pulling from mikesplain/telnet
[DEPRECATION NOTICE] registry v2 schema1 support will be removed in an upcoming release. Please contact admins of the docker.io registry NOW to avoid future disruption.
c52e3ed763ff: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:11fa2b96776f5d34511452ad2b76eafad69321e456ac6653482eadb9d98c52a7
Status: Downloaded newer image for mikesplain/telnet:latest

keys * // 키의 모든것을 보여주라는 것
*0
set hello morris // key value설정
+OK
get hello //가지고오기
$6
morris//가지고 온 value

docker run --rm -it mikesplain/telnet docker.for.mac.localhost 1234

이미지의 호스트에 아이피가 필요한데 이것을 모르기 때문에 도커에서 제공하는 docker.for.mac.localhost 라는 dns을 사용해서 접속 가능하다.

docker.for.win.localhost 는 윈도우 설정

logs 확인하기

이미지에 대한 로그 확인하기

$docker logs [option] [container_id]

$docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
747b5ec128b3        redis               "docker-entrypoint.s…"   9 minutes ago       Up 9 minutes        0.0.0.0:1234->6379/tcp   kdy_redis

$docker logs -f 747
1:C 27 Aug 2019 12:07:51.161 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 27 Aug 2019 12:07:51.161 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 27 Aug 2019 12:07:51.161 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf

이미지확인

도커 이미지 확인 하기

$docker images

이미지 다운로드

$docker pull [name]

이미지 삭제

$docker rmi [name]

컨테이너가 실행 중일때는 삭제가 되지 않는다.

네트워크 만들기

$docker network create [option] NETWORK

네트워크를 만들어서 이미지를 실행할때 아래와같은 네트워크이름을 입력하면된다.

$docker run --name=centos_morris -it --network=[docker_network_name] centos:7 /bin/bash

아이피를 모르더라도 네트워크의 이름만으로도 해결이 가능하다.

Docker Compose

운영 환경에서 많이 사용

$docker-compose version
docker-compose version 1.24.1, build 4667896b
docker-py version: 3.7.3
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.1.0j  20 Nov 2018

하나하나 이미지를 실행했던 것을 하나의 파일에서 환경변수, volumnes , port 등의 여러이미지에 대한 설정을 한번에 실행

docker-compose.yml 파일을 만들어서 내용 입력(이미지, 이미지에 대한 옵션을 설정으로 입력)

해당하는 파일을 읽어서 컨테이너를 실행함

$docker-compose up

해당파일을 읽어서 컨테이너 종료 및 삭제

$docker-compose down

Q : docker compose 사용할때 무조건 docker-compose.yml 의 이름으로 실행해야하는건지?

기본적으로는 docker-compose.yml , docker-compose.yaml 파일을 찾지만

-f 옵션을 사용하여 특정 파일을 지정해 줄수 있음

$docker-compose -f 파일이름 up

강의 내용
youtube.com/watch?v=RlezLB66KPg&list=PL9mhQYIlKEhfw7ZKPgHIm9opAm2ZpmzDq&index=3&t=2423s

'BackEnd > Docker' 카테고리의 다른 글

도커 명령어  (1) 2020.02.09
컨테이너 기반 가상화 플랫폼 '도커(Docker)' 의 이해 1강  (0) 2019.08.26
[docker] MySQL 접속하기 (2)  (0) 2019.06.30
[Docker] install Mysql  (0) 2019.06.23

도커에 대해 T-Academy로 형들과 도커에 대한 이해하는것으로 스터디를 해보기로했다.

실습을 위해 아래의 주소로 들어가서 확인

https://bit.ly/docker-sk

도커의 등장

솔로몬 하이크 -> 파이콘 2013 에서 등장

The future of Linux containers

Mac OS에서 실행 해보자

  • ubuntu(docker container)

  • CentOs(docker container)

  • Busybox(docker container)

    • 도커 커널을 위한 최소한의 이미지
    • 하나의 실행 파일 안에 스트립 다운된 일부 유닉스 도구들을 제공하는 소프트웨어
    • 다수가 리눅스 커널이 제공하는 인터페이스와 함께 동작하도록 설계되어있음 (자원이 매우 적은 임베디드 운영체제를 위해 작성됨)

우분투 에서 실행된 hello, world

$docker run -it ubuntu:latest echo "hello,world!"

우분투의 bash로 접속하기

$docker run -it ubuntu:latest bash

/etc/lsb-realease

centos

/etc/centos-release

busybox

docker run -it busybox:latest sh

컨테이너

컨테이너 : 가상머신

각각의 VM = 서로 다른 환경

각각의 컨테이너 = 서로 다른 환경

Virtual Machine == Container ?같을까 ?

Virtual Machine : 하드웨어 가상화

소프트웨어로 구현된 하드웨어 

컨테이너 : 하드웨어 가상화가 아님

OS에서 지원하는 기능을 사용 (리눅스 커널을 사용)

격리된 환경에서 프로세스를 실행 

한마디로 한 이미지의 프로세스

가상화 된 하드웨어 필요없이 os의 커널을 사용해서 동작함

img

chroot

실제 루트는 / 이지만 ~/box 가 루트인것처럼 인식되게함

자신의 루트를 ~/box로 인식함

#chroot /root/box/ bash

ldd 의존하고 있는 파일의 목록을 볼 수 있다.

예시) ldd bash

도커는 마치 OS의 커널을 위의 chroot 처럼 process를 격리 시켜서 만들어져 동작함

Linux (croups, namespaces, nettling, selinux, netfilter, capabilities, apparmpr) 등의 리눅스 커널을 Docker(lib container, libvirt, lxc, system-nspawn) 등으로 따로 격리 시킨것임

예전에는 lxc를 사용했지만...추후에 ...


실습

  • mysql

  • wordpress

MySQL

$docker run -d -p 3306:3306 --name mysql mysql:latest

앞의 포트 : 안에서 접속할 포트

뒤의 포트 : 밖에서 접속할 포트

-d : 백그라운드에서 실행한다는 뜻

WordPress

이미지

특정 프로세스를 실행하기 위한 환경

  • 계층화된 파일 시스템
  • 이미지는 파일들의 집합
  • 프로세스가 실행되는 환경도 결국 파일들의 집합

도커의 기본 아키텍처

linux

docker run -> server , container(process)

macOS

docker run ->xhyve라는 가상화된 머신에다가 server와 container가 실행됨

xhyve

macOS의 가상화 방식(경량 가상 머신)

컨테이너 = xhyve에서 실행된 프로세스

호스트 머신과 자연스럽게 결합

네트워크 / 볼륨 등 

호스트 머신처럼 사용가능

왜 도커를 사용하는가 ??

컨테이너가 필요한 이유

보편적 물리법칙 언제 어디서나 동일하게 적용된다.

하지만 컴퓨터의 환경은 보편적이지 않다

각각의 OS에서 설치되는 프로그램은 다 다르다. 하나로 통일이 되지 않기 때문에

서버 관리도 어렵다.

도커를 사용하게 되면 어플리케이션 실행 환경까지의 최소한의 파일을 모아둔것이기 때문에 깔끔하게 설치를 할 수 있다.

이미지 : 동작되는게 보장이된다. 사용할 프로세스를 미리 만들어놓기 때문에

개발환경의 pc의 환경을 미리 보장하고 사용하는것이 가능하기 때문에

Q1 : 도커는 시스템전체를 다 사용하나요?

cgroups는 프로세스의 자원을 사용할지 제한을두게 되는데, docker에서도 자원의 제약을 한정해서 쓸 수 있다.

'BackEnd > Docker' 카테고리의 다른 글

도커 명령어  (1) 2020.02.09
컨테이너 기반 가상화 플랫폼 '도커(Docker)' 의 이해 2강  (0) 2019.08.27
[docker] MySQL 접속하기 (2)  (0) 2019.06.30
[Docker] install Mysql  (0) 2019.06.23

Docker MySQL 아이디 생성 및 권한

저번에는 mysql을 도커에 설치 까지 하였지만, 이번에는 아이디 생성 및 권한을 주고 root 로 접속하는것이 아니라 계정을 통해 들어가보도록 하겠다.

Mysql_dev 라는 이름으로 docker container이름을 지정해주었기 때문에 mysql_dev로 시작 함

$docker start mysql_dev

docker mysql_dev 컨테이너를 bash 실행

@kdy:~$docker exec -i -t mysql_dev bash

Mysql 접속

root@78f643c1569b:/# mysql -u root -p

유저 생성

mysql> create user 'morriskim'@'%' identified by 'password';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all privileges on *.* to 'morriskim'@'%';
Query OK, 0 rows affected (0.01 sec)

아래는 dbeaver를 통하여 이전에 생성한 데이터베이스에 접속을 하는 것을 테스트 한것이다.

테스트 성공

Docker 로 mysql을 사용해보자

도커에서 mysql을 탐색

$docker search mysql

도커에서 pull을 사용하여 이미지를 다운받는다. 최신버전으로 다운받아야지 !

daeyunkim@kdy:~$docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
fc7181108d40: Pull complete
787a24c80112: Pull complete
a08cb039d3cd: Pull complete
4f7d35eb5394: Pull complete
5aa21f895d95: Pull complete
a742e211b7a2: Pull complete
0163805ad937: Pull complete
87f18876c3ff: Pull complete
78082f25f167: Pull complete
0a510f055c17: Pull complete
312b0999e433: Pull complete
f864cfdc0264: Pull complete
Digest: sha256:415ac63da0ae6725d5aefc9669a1c02f39a00c574fdbc478dfd08db1e97c8f1b
Status: Downloaded newer image for mysql:latest

도커 이미지 확인

daeyunkim@kdy:~$docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               latest              c7109f74d339        12 days ago         443MB

mysql 도커 실행하기

daeyunkim@kdy:~$docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password --name mysql_dev mysql

-p 3306:3306에서 처음의 3306은 호스트의 포트, 뒤에 3306은 컨테이너의 3306포트를 말한다.

호스트에 3306 포트 접근이 발생하면, 해당 컨테이너에 접속이 된다.

-e MYSQL_ROOT_PASSWORD=password 는 컨테이너를 생성하면서 환경변수를 지정

—name 은 컨테이너의 이름

실행되고 있는지 확인 하기

daeyunkim@kdy:~$docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
78f643c1569b        mysql               "docker-entrypoint.s…"   4 seconds ago       Up 2 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   mysql_dev

Mysql 컨테이너에 접속을 해보자

daeyunkim@kdy:~$docker exec -i -t mysql_dev bash
root@78f643c1569b:/#

최신의 버전의 mysql의 버전을 확인해보자

root@78f643c1569b:/# mysql --version
mysql  Ver 8.0.16 for Linux on x86_64 (MySQL Community Server - GPL)

Mysql 접속하기

root@78f643c1569b:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.16 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

참고 사이트 :

https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

https://jayden-lee.github.io/post/docker/mysql-install/

https://blog.hanumoka.net/2018/04/29/docker-20180429-docker-install-mysql/

+ Recent posts