[Docker] Docker, Docker Desktop

20220621_203028

Docker ToolBox는 이미 업데이트가 끝나고 더 이상 안쓰이는 추세이므로 Docker Desktop을 쓴다.

Toolbox가 전부(대다수가) cli 환경에서 진행된다면 Docker Desktop은 gui환경에서 어느정도 조정이 가능하다.

Toolbox가 quickstart라는 cmd를 준다면 desktop은 cmd를 따로 주진 않지만 powershell이나 vsc안에서 터미널에서 그대로 하면 된다. (이걸 몰라서 왜 desktop엔 도커 전용 cmd가 없었나 삽질..)

20220621_203812

대신 vsc에서는 docker를 마켓 플레이스에서 깔아주자.

20220621_204006

https://docs.docker.com/get-started/

이 공식 문서에서 가장 기본적인 get-started 1 step을 참조해서 실행해본다.

D:\WebCash\vmwork\docker01>docker images
REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
getting-started          latest    92ba980f01dd   3 minutes ago   321MB
node                     latest    372b746c33bc   4 days ago      998MB
docker/getting-started   latest    cb90f98fd791   2 months ago    28.8MB

D:\WebCash\vmwork\docker01>docker image rm 92ba
Untagged: getting-started:latest
Deleted: sha256:92ba980f01dd0fab685402bd73f0397d5c9023719dd1b1e62c748baf12d21d33

D:\WebCash\vmwork\docker01>docker images        
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
node                     latest    372b746c33bc   4 days ago     998MB
docker/getting-started   latest    cb90f98fd791   2 months ago   28.8MB

D:\WebCash\vmwork\docker01>docker image rm cb90
Error response from daemon: conflict: unable to delete cb90f98fd791 (must be forced) - image is being used by stopped container ca976ea7e784

D:\WebCash\vmwork\docker01>docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

D:\WebCash\vmwork\docker01>docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
405f018f9d1d: Pull complete
Digest: sha256:b6b83d3c331794420340093eb706a6f152d9c1fa51b262d9bf34594887c2c7ac
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

D:\WebCash\vmwork\docker01>docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

D:\WebCash\vmwork\docker01>docker pull ubuntu:20.14
Error response from daemon: manifest for ubuntu:20.14 not found: manifest unknown: manifest unknown

D:\WebCash\vmwork\docker01>docker pull ubuntu:20.04
20.04: Pulling from library/ubuntu
d7bfe07ed847: Pull complete
Digest: sha256:fd92c36d3cb9b1d027c4d2a72c6bf0125da82425fc2ca37c414d4f010180dc19
Status: Downloaded newer image for ubuntu:20.04
docker.io/library/ubuntu:20.04

D:\WebCash\vmwork\docker01>docker image ls
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
node                     latest    372b746c33bc   4 days ago     998MB
ubuntu                   latest    27941809078c   2 weeks ago    77.8MB
ubuntu                   20.04     20fffa419e3a   2 weeks ago    72.8MB
docker/getting-started   latest    cb90f98fd791   2 months ago   28.8MB

D:\WebCash\vmwork\docker01>docker run
"docker run" requires at least 1 argument.
See 'docker run --help'.

Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Run a command in a new container

D:\WebCash\vmwork\docker01>docker run ubuntu:20.04

D:\WebCash\vmwork\docker01>
D:\WebCash\vmwork\docker01>docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

D:\WebCash\vmwork\docker01>
D:\WebCash\vmwork\docker01>docker run -name ubuntu:20.04
unknown shorthand flag: 'n' in -name
See 'docker run --help'.

D:\WebCash\vmwork\docker01>docker run ubuntu:20.04 /bin/bash

D:\WebCash\vmwork\docker01>docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

D:\WebCash\vmwork\docker01>docker run -i ubuntu:20.04

bash: line 1: $'\r': command not found

bash: line 2: $'\r': command not found

bash: line 3: $'\r': command not found

D:\WebCash\vmwork\docker01>docker run -it ubuntu:20.04 /bin/bash
root@3787125d5672:/# ls
bin   dev  home  lib32  libx32  mnt  proc  run   srv  tmp  var
boot  etc  lib   lib64  media   opt  root  sbin  sys  usr
root@3787125d5672:/# ^C
root@3787125d5672:/# ^C
root@3787125d5672:/# ^C
root@3787125d5672:/# exit
exit

D:\WebCash\vmwork\docker01>docker run -it -d  ubuntu:20.04 /bin/bash
90499bd6b1600dd133bfdeef8d77437efa945023603ae06827846b31ed54d823

D:\WebCash\vmwork\docker01>docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS         PORTS
    NAMES
90499bd6b160   ubuntu:20.04   "/bin/bash"   8 seconds ago   Up 7 seconds
    busy_stonebraker

D:\WebCash\vmwork\docker01>docker run -it -d -p 8080:8080 ubuntu:20.04
12442c0be2d6ca4c660b932edccc91930e7f03fc64275e6c29abf6b650fa0c00


D:\WebCash\vmwork\docker01>docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS          PORTS                    NAMESS                    NAMES                                                       0.0:8080->8080/tcp   vigorous_hoover
12442c0be2d6   ubuntu:20.04   "bash"        43 minutes ago   Up 43 minutes   0.0.                     busy_stonebraker0.0:8080->8080/tcp   vigorous_hoover
90499bd6b160   ubuntu:20.04   "/bin/bash"   49 minutes ago   Up 49 minutes       
                     busy_stonebraker

D:\WebCash\vmwork\docker01>docker exec -it busy_stonebraker /bin/bash
//아이디로 실행하는 거
root@90499bd6b160:/#


이후 톰캣 설치 로그부터

root@90499bd6b160:/# apt search tomcat 톰캣 설치


mkdir /usr/share/tomcat9/logs/



apt install -y openjdk-8-jdk
apt install -y tomcat9
apt install -y tomcat9-admin

//톰캣 폴더로 이동
cd /usr/shar/tomcat9
cd bin
bash startup.sh


bash /usr/share/tomcat9/bin/startup.sh

위 파일들 안되면 직접 이동해서 실행

위 구문들을 실행하면 톰캣이 시작된다.

20220621_212741

그리고 apache-tomcat-8.5.81 폴더에서 cd webapps/ 로 톰캣 폴더 안의 webapp으로 이동

mkdir test01
cd test01
echo hello world >index.html
apt install git

root@90499bd6b160:~/apache-tomcat-8.5.81/webapps# git clone https://github.com/bit01class/busanTest01.git

이런식으로 깃허브에 올린 내용을 받아와서 확인도 가능하다.

apt install -y maven


cd busta01test

mvn package

. mvnw 으로 패키지 설치

docker run -it -d -p 33006:3306 mysql --name bit-mysql
//it = 인터랙션 모드 d= 백그라운드모드 포트번호 매핑(3306을 몇번으로 할지 (안쓰는거로) 33006) 나는 33006으로 접속하겠지만 내부적으로는 3306으로 인식해서 받는다.

docker run -e MYSQL_ROOT_PASSWORD = my-secret-



docker run -it -e ubuntu:20.04


docker run -it -e key1=val ubuntu:20.04

echo $key1

docker run my-secret-pw

docker run -it -d -p 33006:3306 -e MYSQL_ROOT_PASSWORD=mysql mysql --name bit-mysql8


docker run -it -e key1=val ubuntu:20.04

20220622_114228

20220622_114251



D:\WebCash\Springboot\boot05\target


java -jar D:\WebCash\Springboot\boot05\target\boot05-0.0.1-SNAPSHOT.jar
패키지 만들어서 배포

아까 만들었던 jar파일을 backend 안에 data폴더를 만들어서 넣어줬다.

application.properties

#spring.profile.active=dev
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.url=jdbc:mysql://localhost:33006/xe
spring.datasource.url=jdbc:mysql://localhost:3306/xe
spring.datasource.username=root
spring.datasource.password=mysql

#logging.level.web=debug
#
#logging.level.com.bit.sts24=debug


D:\WebCash\vmwork\docker02\backend\data>docker run -it -d ^
More?  -v /c/vmwork/docker02/backend/data:/data ^
More?  --name boot05 ubuntu:20.04
bb6488d8be9ae77f6cefd92f879602306273be8d54253cdbd39e5dc6341224c3
D:\WebCash\vmwork\docker02\backend\data>docker exec -it ce /bin/bash

Error: No such container: ce 만약 이런 에러가 나오면 해당 컨테이너가 없다는 거고 이 경우 나는

여기서 실행하는거 bb64로 시작하는 컨테이너를 시작하는 거다.

D:\WebCash\vmwork\docker02\backend\data>docker run -it -d ^
More?  -v /data ^
More? --name boot ubuntu:20.04
159da7b4abb92813f39fe0e5ee06c8c4c4e6b3ea689949cae1efc13acde55a03
D:\WebCash\vmwork\docker02\backend\data>docker run -it -d ^
More?  -v /data ^
More? --name boot ubuntu:20.04
159da7b4abb92813f39fe0e5ee06c8c4c4e6b3ea689949cae1efc13acde55a03

D:\WebCash\vmwork\docker02\backend\data>exec -it 00 /bin/bash
'exec'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
배치 파일이 아닙니다.

D:\WebCash\vmwork\docker02\backend\data>docker exec -it 00 /bin/bash
Error: No such container: 00

D:\WebCash\vmwork\docker02\backend\data>docker exec -it 159 /bin/bash
root@159da7b4abb9:/# ls
bin   data  etc   lib    lib64   media  opt   root  sbin  sys  usr
boot  dev   home  lib32  libx32  mnt    proc  run   srv   tmp  var
root@159da7b4abb9:/# cd data
root@159da7b4abb9:/data#

docker exec -it boot05(플젝) /bin/bash

cd data //데이터로 이동 apt update

apt install -y openjdk-8-jdk java -jar *.jar –spring.profiles.active=dev

도커에 jdk설치 그 전에 apt install 로 업데이트 해준다.

root@159da7b4abb9:/data# apt install -y openjdk-8-jdk


중간에 Geographic area: 이렇게 나오는데

https://ykarma1996.tistory.com/93

를 참조해서

20220622_125224

해서 6 입력 후 엔터 3번 하면 69로 seoul이 나온다.

D:\WebCash\vmwork\docker02\backend\data>docker run -it -d -p 8080:8080 ^
More? -v /home/docker/data:/data ^
More? --name boot05 ubuntu:20.04

D:\WebCash\vmwork\docker02\backend\data>docker exec -it boot05 /bin/bash

root@5388a558d26c:/# echo install apt install -y openhdk-8-jdk > jdksetup.sh


(삽질 기록)

위에서 jar파일이 계속 안 들어 가졌는데 내 경로랑 달라서 그랬다.

나 같은 경우 jar의 경로가 D : / WebCash/vmwork/docker02/backend/data:/data 이였는데 엉뚱하게 vmwork/docker02/backend/data:/data 만 실행하다 보니 난 C드라이브에 vmwork/docker02폴더가 없는데 계속 만드니 jar파일을 못 찾았던 것.

docker run -it -d ^
 -v D:/WebCash/vmwork/docker02/backend/data:/data ^
--name boot05 ubuntu:20.04

apt update apt install -y openjdk-8-jdk-headless java -jar *.jar –spring.profiles.active=dev

docker run -it -d –name bit-mysql8 -p 33006:3306 -e MYSQL_ROOT_PASSWORD=mysql mysql

docker run -it -d -p 8080:8080 ^ -v D:/WebCash/vmwork/docker02/backend/data:/data –name boot05 ^ boot05 ubuntu:20.04 /data/startshell.sh

docker exec -it boot05 /bin/WebCash

apt update&apt install -y openjdk-8-jdk-headless java -jar /data/*.jar –spring.profiles.active=dev

20220622_173108

카탈리나를 직접 실행하니까 되긴 했다.(톰캣의 특수성) 특수한 상황에서 실행.

그리고 -it 옵션 안줘도 돌아가는 건 돌아간다. 무한루프 스레드. 프로그램이 끝나야 끝난다.


dockerfile

FROM ubuntu:20.04
WORKDIR /data
RUN apt update -y
RUN apt upgrade -y
COPY boot05-0.0.1-SNAPSHOT.jar /data/
RUN apt install -y wget
RUN apt install -y openjdk-8-jdk-headless
RUN wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.81/bin/apache-tomcat-8.5.81.tar.gz
RUN tar -xvf apache-tomcat-8.5.81.tar.gz
ENTRYPOINT ["./apache-tomcat-8.5.81/bin/catalina.sh", "run"]
EXPOSE 8080

아래는 콘솔 명령

docker network create our

docker run -it -d --name bit-mysql8 -v /home/docker/sql:/sql
    --network our -e MYSQL_ROOT_PASSWORD=mysql mysql

docker run -it -d -p 8080:8080 --network our ^
    -v /home/docker/data:/data --name boot05 ^
    ubuntu:20.04


dockerfile과 위 콘솔로만 하는데 하나의 이미지 만드는데 모든 걸 하나의 컨테이너로 만듬.


근데 보면 굉장히 복잡하고 번거롭다.

도커 컴포즈를 사용할 것. 결국 우리가 쓸 것은 docker compose

근데 도커 컴포즈가 기능이 좀 줄었다. 도커 컴포즈가 끝나고 도커 스왑이 나왔는데 서비스 종료됨. 다른 오케스트레이션 도구가 좋은게 많이 나왔기 떄문.

그리고 근래 유행하는 것이 쿠버네티스.

그리고 실제 AWS 랑 같은게 쿠버네티스.

도커를 쓰는데 어떻게 효율적으로 쓰느냐 -> 쿠버네티스

스케일 업 하면 컨테이너 늘리고 이런 걸 관리해줌. 이걸 서비스로 낸게 AWS이다.

물론 이쪽은 개발보다는 데브옵스쪽이긴 하다. 근데 마찬가지로 ec2,kubernetis 전부 최하단은 도커를 사용하고 있는 것.


docker run -id -d –name sampledb1 -p 33006:3306 ^

-e MYSQL_ROOT_PASSWORD=mysql mysql

D:\WebCash\vmwork\docker03\step1>docker run -it -d --name sample1 ^
More? -e MYSQL_ROOT_PASSWORD=mysql mysql

D:\WebCash\vmwork\docker03\step1>docker run -it -d --name sampledb1 -p 33006:3306 -e MYSQL_ROOT_PASSWORD=mysql mysql
880abbcb799b4881ad70039ef1b5bc967d2776b4779a065a459bc751ea0b4dbf

D:\WebCash\vmwork\docker03\step1>docker volume create empdb



docker run -it -d -v empdb:/var/lib/mysql --name sampledb1 -p 33006:3306  -e MYSQL_ROOT_PASSWORD=mysql mysql



docker: Error response from daemon: Conflict. The container name
-name sampledb1 -p 33006:3306 -e MYSQL_ROOT_PASSWORD=mysql mysql
47dc36b5481db2bd129621fc247f6b1888dc5e977b69e79fafc0121248f690d9

D:\WebCash\vmwork\docker03\step1>docker run -it -d -v /var/lib/docker/volumes/empdb/_data:/var/lib/mysql --name sampledb1 -p 33006:3306  -e MYSQL_ROOT_PASSWORD=mysql mysql
docker: Error response from daemon: Conflict. The container name
"/sampledb1" is already in use by container "47dc36b5481db2bd129621fc247f6b1888dc5e977b69e79fafc0121248f690d9". You have to remove (or rename) that container to be able to reuse that name.       
See 'docker run --help'.

D:\WebCash\vmwork\docker03\step1>docker-compose version
Docker Compose version v2.6.0

D:\WebCash\vmwork\docker03\step1>docker-compose up -d


D:\WebCash\vmwork>docker run -it -d -p 33006:3306 -e MYSQL_ROOT_PASSWORD=mysql -v sampleDB=/var/lib/mysql






© 2021.03. by yacho

Powered by github