Docker

Docker 설치

 

# Install Docker CE

## Set up the repository

### Install required packages.

yum -y install yum-utils device-mapper-persistent-data lvm2

 

### Add docker repository.

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

 

## Install docker ce.

yum -y update && yum -y install containerd.io-1.2.10 docker-ce-19.03.4 docker-ce-cli-19.03.4

 

## Create /etc/docker directory.

mkdir /etc/docker

 

# Setup daemon.

 

cat > /etc/docker/daemon.json <<EOF

{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

 

mkdir -p /etc/systemd/system/docker.service.d

 

# Restart docker.

systemctl daemon-reload

systemctl restart docker

systemctl enable docker

 

 

Docker 실행

 

dockerhub에서 centos 이미지를 가져온다.

https://hub.docker.com/_/centos

$ docker pull centos:7.7.1908

7.7.1908: Pulling from library/centos
f34b00c7da20: Pull complete
Digest: sha256:50752af5182c6cd5518e3e91d48f7ff0cba93d5d760a67ac140e2d63c4dd9efc
Status: Downloaded newer image for centos:7.7.1908
docker.io/library/centos:7.7.1908

$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7.7.1908            08d05d1d5859        4 months ago        204MB

$ docker run -it centos:7.7.1908 /bin/bash

[root@eb70a6c63fc1 /]#

자바 RPM 패키지 다운로드

[root@eb70a6c63fc1 /]# yum install java --downloadonly --downloaddir=/opt

다른 터미널로 접속

$ docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
eb70a6c63fc1        centos:7.7.1908     "/bin/bash"         9 minutes ago       Up 9 minutes                            goofy_hellman

도커 컨테이너 내에서 다운받은 파일을 호스트로 copy

$ docker cp eb70a6c63fc1:/java.tar.gz ./java.tar.gzdocker cp eb70a6c63fc1:/root/java.tar.gz ./java.tar.gz

$ ls -al

-rw-r--r--.  1 root root 50382816 Mar 21 22:12 java.tar.gz

 

Docker Build

$ vi Dockerfile (java 설치를 위한 rpm 파일들은 아까 docker cp명령으로 다운받은 파일들이다.)

FROM centos:7.7.1908
COPY ./java/* /opt/
RUN yum install -y /opt/*.rpm

$ docker build -t java:1.8.0 .  (Dockerfile 과 java 폴더가 있는 위치에서 수행)

Sending build context to Docker daemon  101.7MB
Step 1/4 : FROM centos:7.7.1908
 ---> 08d05d1d5859
Step 2/4 : COPY ./java/* /opt/
 ---> a9677f127100
Step 3/4 : RUN yum install -y /opt/*.rpm
 ---> Running in 3c8cb51b9a22

Loaded plugins: fastestmirror, ovl
Examining /opt/alsa-lib-1.1.8-1.el7.x86_64.rpm: alsa-lib-1.1.8-1.el7.x86_64

...........<중략>...........

Complete!
Removing intermediate container 3c8cb51b9a22
 ---> ca88f3cca4b1
Step 4/4 : CMD java -version &
 ---> Running in bbfd462a5a03
Removing intermediate container bbfd462a5a03
 ---> fced155d850e
Successfully built fced155d850e
Successfully tagged java:1.8.0

$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
java                 1.8.0                 fced155d850e         6 seconds ago       472MB
centos              7.7.1908            08d05d1d5859        4 months ago        204MB

$ docker run -it --rm java:1.8.0 /bin/bash

[root@171c5bd5d7a5 /]# java -version 
openjdk version "1.8.0_242" 
OpenJDK Runtime Environment (build 1.8.0_242-b08) 
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

 

 

 

톰캣 Docker 빌드하기

톰캣 설치파일 다운로드

$ wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.27/bin/apache-tomcat-8.5.27.tar.gz

 

tomcat_profile 은 현재환경에 맞게 수정한다.

$ vi tomcat_profile

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre 
JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre 
CATALINA_HOME=/usr/local/apache-tomcat-8.5.27 
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib/jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar 
PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin 
export JAVA_HOME CLASSPATH PATH CATALINA_HOME JRE_HOME

$ vi Dockerfile (아까 java가 설치된 이미지에 톰캣만 추가 설치한다.)

FROM java:1.8.0

COPY apache-tomcat-8.5.27.tar.gz /usr/local/
COPY tomcat_profile /etc/tomcat_profile
RUN cd /usr/local \
    && tar -zxf ./apache-tomcat-8.5.27.tar.gz \
    && source /etc/tomcat_profile

EXPOSE 8080

CMD ["/usr/local/apache-tomcat-8.5.27/bin/catalina.sh", "run"]

$ docker run -it --rm tomcat:1.0

---------------- 중략 --------------

21-Mar-2020 21:07:52.790 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/apache-tomcat-8.5.27/webapps/manager] has finished in [31] ms
21-Mar-2020 21:07:52.798 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
21-Mar-2020 21:07:52.818 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
21-Mar-2020 21:07:52.822 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1128 ms

다른 터미널로 접속

$ docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
f603c5f79d38        tomcat:1.0          "/usr/local/apache-t…"   14 minutes ago      Up 14 minutes       8080/tcp            wonderful_spence

$ docker inspect f603c5f79d38

------------------- 중략 ---------------------

        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "524127c15f8675a9e5cbfd9b672a21350c89ec67e399ed599e9e596b9c57623c",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "8080/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/524127c15f86",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "139c9b895af9b6615b806d266d196921673b1a7a3a2b116434b50b855fac656b",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",

$  curl http://172.17.0.2:8080/

 

 

 

 

 

 

 

 

톰캣 Helm 배포하기

 

$ helm install ./custom-tomcat --dry-run

NAME:   khaki-lizard

 

$ helm install ./custom-tomcat --namespace devtest --name custom-tomcat

NAME:   custom-tomcat
LAST DEPLOYED: Thu Mar 26 17:30:22 2020
NAMESPACE: devtest
STATUS: DEPLOYED

RESOURCES:
==> v1/Service
NAME                         TYPE       CLUSTER-IP      EXTERNAL-IP  PORT(S)  AGE
custom-tomcat-custom-tomcat  ClusterIP  172.20.221.129  <none>       80/TCP   0s

==> v1beta1/Deployment
NAME                         DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
custom-tomcat-custom-tomcat  1        0        0           0          0s

==> v1beta1/Ingress
NAME                         HOSTS                                      ADDRESS  PORTS  AGE
custom-tomcat-custom-tomcat  custom-tomcat.devpaas.cloud.samsungds.net  80       0s

==> v1/NetworkPolicy
NAME           POD-SELECTOR           AGE
custom-tomcat  release=custom-tomcat  0s

==> v1/Pod(related)
NAME                                         READY  STATUS             RESTARTS  AGE
custom-tomcat-custom-tomcat-b6989b5d8-sn5bv  0/1    ContainerCreating  0         0s

 

$ kubectl get pod -n devtest

custom-tomcat-custom-tomcat-b6989b5d8-sn5bv   1/1     Running            0          16s

 

$ kubectl get ingress -n devtest

custom-tomcat-custom-tomcat   custom-tomcat.devpaas.cloud.samsungds.net                      80      32s

 

웹브라우저로 접속

 

 

$ helm delete custom-tomcat --purge

release "custom-tomcat" deleted 

 

$ kubectl get pod -n devtest

custom-tomcat-custom-tomcat-b6989b5d8-sn5bv   0/1     Terminating        0          8m46s 

 

'Kubernetes' 카테고리의 다른 글

Kubernetes Worker Node Join  (0) 2020.12.05
Kubeflow 1.0  (2) 2020.04.12
KF Serving  (1) 2020.03.13
Knative Serving  (0) 2020.03.09
Istio Networking  (0) 2020.03.09