티스토리 뷰

 

 

image 파일로 만들기


▶ apache container 의 계열 확인

더보기

Redhat : cat / etc / redhat-release

Devian cat / etc / issue

 

▷ useradd admin 만들어도 바로 홈 디렉터리에 만들어지지는 않는다 / home / admin 이 없다

>> useradd -m admin : / home / admin 디렉터리를 생성하는 옵션

root@ca977e46c872:/usr/local/apache2/htdocs# useradd -m admin

 

 

 

▷ apt 업데이트로 패키지를 다운로드 한다

>> update 하지 않으면, repo가 존재하지 않는다

root@ca977e46c872:/usr/local/apache2# apt update

 

 

▷ net-tools 다운로드

root@ca977e46c872:/usr/local/apache2/htdocs# apt install net-tools -y

 

▷ 원격 접속 했을 시 공격을 받을 가능성이 있으므로, 보안상 좋지 않다 ( 삭제한다 )

>> telnet 접속하면 보인다

root@ca977e46c872:/usr/local/apache2/htdocs# rm /etc/motd
root@ca977e46c872:/usr/local/apache2/htdocs# rm /etc/issue.net

 

 

 

 

▶ 패키지를 다운로드 했는데, Host 에서 컨테이너를 지우면 사라진다

>> 이전에 배웠던 방법은 - - volume 옵션을 붙이는 방법인데 이 방법은 불가능하다

>> 패키지를 다운로드 했으므로, 패키지는 한 두군데에 영향을 미치는게 아니다

 

 

# diff 명령어 >> 두 디렉터리의 차이를 보여준다

[vagrant@docker1 work]$ diff /etc/issue /etc/motd
1,3d0
< \S
< Kernel \r on an \m
<

 

 

▷바뀌었거나 / 수정된 부분을 알려준다

>> A : add

>> C : change

>> D : delete

[vagrant@docker1 work]$ docker diff apache

 

 

▶ 실행중인 컨테이너를 이미지로 만든다

더보기

docker container commit [옵션] 컨테이너 식별자 컨테이너 이름 [이미지[:태그명]]

[vagrant@docker1 work]$ docker container commit -a "loo<kildong@naver.com" apache  custom_httpd:1.0
sha256:3349923d0370bf6e77119bdea4f54782b08bc38ac18539d58ed9b69a8a23d12e
[vagrant@docker1 work]$ docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
custom_httpd   1.0       3349923d0370   54 seconds ago   189MB
mariadb        latest    b8bba28b797b   12 days ago      405MB
nginx          latest    e4720093a3c1   2 weeks ago      187MB
alpine         latest    05455a08881e   5 weeks ago      7.38MB
mysql          latest    a88c3e85e887   6 weeks ago      632MB
httpd          2.4       2776f4da9d55   6 weeks ago      167MB
httpd          latest    2776f4da9d55   6 weeks ago      167MB
ubuntu         18.04     f9a80a55f492   9 months ago     63.2MB
hello-world    latest    d2c94e258dcb   10 months ago    13.3kB
centos         8         5d0da3dc9764   2 years ago      231MB

 

 

▷ 삭제하고 확인

>> 미리 만들어둔 / home / admin 이 그대로 존재

# TAG 1.0 을 붙여줘야 컨테이너가 실행된다

[vagrant@docker1 work]$ docker run -d --name cus1 custom_httpd:1.0
f17013d74841d682477bf5ea783b251198d8647e08358056e5fd223c1860b9bd
[vagrant@docker1 work]$ docker exec -it cus1 /bin/bash
root@f17013d74841:/usr/local/apache2# ls /home
admin  home

 

 

 

 

 

tar 아카이브로 만들기


 

 

▶ 사전작업

# tab 하면 하나밖에 없는 컨테이너 이므로 나타난다

[vagrant@docker1 work]$ docker run -d httpd:2.4
5923e9b7666cb492a54cefc6573388add43acd8ac699349284e2c2b2a5646a89

[vagrant@docker1 work]$ docker ps
CONTAINER ID   IMAGE       COMMAND              CREATED         STATUS         PORTS     NAMES
5923e9b7666c   httpd:2.4   "httpd-foreground"   3 seconds ago   Up 2 seconds   80/tcp    xenodochial_northcutt

[vagrant@docker1 work]$ docker exec -it xenodochial_northcutt /bin/bash
root@5923e9b7666c:/usr/local/apache2#
root@5923e9b7666c:/usr/local/apache2# useradd -m admin
root@5923e9b7666c:/usr/local/apache2# rm /etc/issue.net

 

 

● tar 생성

[vagrant@docker1 work]$ docker container export xenodochial_northcutt > httpd.tar

 

 

▷ httpd.tar 에 존재한다

[vagrant@docker1 work]$ tar -tf httpd.tar | grep admin
home/admin/
home/admin/.bash_logout
home/admin/.bashrc
home/admin/.profile

 

 

▶ 백업과 같은 맥락이나, httpd.tar 를 푼다고 해서 image 로 쓸 수 있는 건 아니다

# | 로 넘어온 값을 - 로 대체한다

[vagrant@docker1 work]$ cat httpd.tar | docker image import - myhttpd:1.0
[vagrant@docker1 work]$ docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
myhttpd        1.0       03b5b4bdef98   4 seconds ago    166MB
custom_httpd   1.0       3349923d0370   24 minutes ago   189MB

 

 

▩ 도커 이미지가 실행이 되지 않는다

 

>> 컨테이너는 올라갈 때에는 항상 커맨드가 필요하다 

 

 

▷ sleep 실행으로 커맨드가 들어가면 바로 실행이 된다

[vagrant@docker1 work]$ docker run -d --name cus1 myhttpd:1.0 /bin/sleep 300
9672fccbe35dd76331370bc150c159086d0e51e9bbc2aa63c77d5f0f3464a946
[vagrant@docker1 work]$ docker ps
CONTAINER ID   IMAGE         COMMAND              CREATED          STATUS          PORTS     NAMES
9672fccbe35d   myhttpd:1.0   "/bin/sleep 300"     7 seconds ago    Up 6 seconds              cus1
5923e9b7666c   httpd:2.4     "httpd-foreground"   23 minutes ago   Up 23 minutes   80/tcp    xenodochial_northcutt

 

 

 

● 원래 아파치는 무슨 커맨드를 실행하는지 확인해보기

>> 커맨드를 올리면, httpd-foreground 를 실행하고 있다

[vagrant@docker1 work]$ docker run -d --name cus2 httpd:2.4
750e59cd384b51453b2a0c0e2f6dc66263487ceac655f037e8198bb335a9f6a9

[vagrant@docker1 work]$ docker ps
CONTAINER ID   IMAGE         COMMAND              CREATED              STATUS              PORTS     NAMES
750e59cd384b   httpd:2.4     "httpd-foreground"   18 seconds ago       Up 17 seconds       80/tcp    cus2
9672fccbe35d   myhttpd:1.0   "/bin/sleep 300"     About a minute ago   Up About a minute             cus1
5923e9b7666c   httpd:2.4     "httpd-foreground"   24 minutes ago       Up 24 minutes       80/tcp    xenodochial_northcutt

 

 

▷ httpd-foreground 로 실행해보자

[vagrant@docker1 work]$ docker run -d --name cus2 myhttpd:1.0 httpd-foreground

 

▩ 실행해도 안올라온다

[vagrant@docker1 work]$ docker ps
CONTAINER ID   IMAGE         COMMAND              CREATED          STATUS          PORTS     NAMES
9672fccbe35d   myhttpd:1.0   "/bin/sleep 300"     3 minutes ago    Up 3 minutes              cus1
5923e9b7666c   httpd:2.4     "httpd-foreground"   26 minutes ago   Up 26 minutes   80/tcp    xenodochial_northcutt

 

 

▷ httpd-foreground 를 찾았다

>> rm -f /usr/local/apache2/logs/httpd.pid 삭제해야 시스템이 아피치가 올라왔는지 아닌지를 확인한다??

>> exec httpd -DFOREGROUND "$@" 가 출력된다

root@5923e9b7666c:/usr/local/bin# find / -name httpd-foreground
find: '/proc/1/map_files': Operation not permitted
find: '/proc/8/map_files': Operation not permitted
find: '/proc/9/map_files': Operation not permitted
find: '/proc/10/map_files': Operation not permitted
find: '/proc/106/map_files': Operation not permitted
find: '/proc/113/map_files': Operation not permitted
/usr/local/bin/httpd-foreground
root@5923e9b7666c:/usr/local/apache2# cd /usr/local/bin/
root@5923e9b7666c:/usr/local/bin# cat httpd-foreground
#!/bin/sh
set -e

# Apache gets grumpy about PID files pre-existing
rm -f /usr/local/apache2/logs/httpd.pid

exec httpd -DFOREGROUND "$@"

 

 

▷PATH 에는 httpd 가 잡혀있는데 우리가 실행할 때에는 잡히지 않는다

>> 직접 실행할때 저 PATH로 잡아준다

root@5923e9b7666c:/usr/local/bin# echo $PATH
/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@5923e9b7666c:/usr/local/bin# find / -name httpd
find: '/proc/1/map_files': Operation not permitted
find: '/proc/8/map_files': Operation not permitted
find: '/proc/9/map_files': Operation not permitted
find: '/proc/10/map_files': Operation not permitted
find: '/proc/106/map_files': Operation not permitted
find: '/proc/114/map_files': Operation not permitted
/usr/local/apache2/bin/httpd

 

▶ 직접 경로로 잡아준다

# 위에 나온 exec httpd -DFOREGROUND "$@" 에서 exec 는 실행의 의미이므로 뺀다

[vagrant@docker1 work]$ docker run -d --name cus4 myhttpd:1.0 /usr/local/apache2/bin/httpd -DFOREGROUND
f2f8ee44a41c36b0a5fbbc6bbe92820c2a7d10d012a9d8a5e4e4a82e16a7b6da

 

>> cus4 가 올라왔다

[vagrant@docker1 work]$ docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS     NAMES
f2f8ee44a41c   myhttpd:1.0   "/usr/local/apache2/…"   3 seconds ago    Up 2 seconds              cus4
5923e9b7666c   httpd:2.4     "httpd-foreground"       33 minutes ago   Up 33 minutes   80/tcp    xenodochial_northcutt

 

 

 

 

◎ 위의 방식은 굉장히 불편하고 복잡하므로 잘 사용 안한다

 

 

# 장비 2개로 확인해야한다

# Ubuntu 장비도 docker 사용 가능하도록 그룹에 넣는다 >> 이후에 새로 로그인

vagrant@docker2:~$ sudo usermod -aG docker vagrant
vagrant@docker2:~$ groups
vagrant docker

 

▷ 실습 전 Ubuntu 의 모든 이미지와 컨테이너 삭제

# - f 강제 삭제 가능하다

# rmi 는 이미지 삭제

vagrant@docker2:~$ docker rm $(docker ps -aq)
69ae4110b2b6
63d6623ea9f5
vagrant@docker2:~$ docker rmi hello-world:latest
Untagged: hello-world:latest
Untagged: hello-world@sha256:d000bc569937abbe195e20322a0bde6b2922d805332fd6d8a68b19f524b7d21d
Deleted: sha256:d2c94e258dcb3c5ac2798d32e1249e42ef01cba4841c2234249495f87264ac5a
Deleted: sha256:ac28800ec8bb38d5c35b49d45a6ac4777544941199075dff8c4eb63e093aa81e
vagrant@docker2:~$ docker rmi -f hello-world:latest
Error response from daemon: No such image: hello-world:latest

 

 

▷ 랜카드 하나를 끊을 것이기에, net-tools 를 다운로드한다

vagrant@docker2:~$ sudo apt update
vagrant@docker2:~$ sudo apt install -y net-tools

 

 

▶ ifconfig 사용 가능해졌다

vagrant@docker2:~$ sudo ifconfig eth0 down
vagrant@docker2:~$ ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:8c:69:41 brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic eth0
       valid_lft 86400sec preferred_lft 86400sec
    inet6 fe80::a00:27ff:fe8c:6941/64 scope link tentative
       valid_lft forever preferred_lft forever

 

▩ 근데 핑이 간다 .. CentOS 로 전환

vagrant@docker2:~$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=31.1 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=115 time=31.5 ms

 

 

 

▶ CentOS 로 사전작업

● CentOS 로 다시 랜카드 끊어서 인터넷을 끊는다

[vagrant@docker1 work]$ sudo nmcli dev disconnect eth0
Device 'eth0' successfully disconnected.
[vagrant@docker1 work]$ sudo nmcli dev s
DEVICE       TYPE      STATE         CONNECTION
eth1         ethernet  connected     System eth1
eth0         ethernet  disconnected  --
docker0      bridge    unmanaged     --
veth291fde8  ethernet  unmanaged     --
veth9cf3794  ethernet  unmanaged     --
lo           loopback  unmanaged     --
[vagrant@docker1 work]$ ping 8.8.8.8
connect: Network is unreachable

 

▷ db 이미지 / mysql 이미지 CentOS 에서 삭제

[vagrant@docker1 work]$ docker rmi mariadb:latest
[vagrant@docker1 work]$ docker rmi mysql:latest

 

 

▶ Ubuntu 에서 mysql 과 DB 를 다운로드 한다

vagrant@docker2:~$ docker pull mysql
vagrant@docker2:~$ docker pull mariadb

 

 

 

인터넷이 되는 장비에서 docker 이미지를 받아서 보안에 의해 인터넷을 끊은 장비로 보내주는 방법

>> 레이어로 저장되어 있는 이미지를 다 찾아서 하나씩 보내주기는 힘들다

>> 이럴때에는 image 를 tar 아카이브로 만들어서 보내면 된다

 

# 가장 뒤에는 도커 이미지이다

vagrant@docker2:~$ docker image save -o mysql.tar mysql
vagrant@docker2:~$ docker image save -o mariadb.tar mariadb

 

 

◎ sftp 로 접속해서 보낸다

vagrant@docker2:~$ sftp vagrant@192.168.25.10

The authenticity of host '192.168.25.10 (192.168.25.10)' can't be established.
ED25519 key fingerprint is SHA256:7lB7Vu/HAkdWjxrTGLNC8/9GPMAtJNbshCxWnYSEKes.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.25.10' (ED25519) to the list of known hosts.

vagrant@192.168.25.10's password:
Connected to 192.168.25.10.

sftp>
sftp> pwd
Remote working directory: /home/vagrant
sftp> ls
dbstore  mydata   work
sftp> !pwd
/home/vagrant
sftp> !ls
mysql.tar

 

sftp> put mysql.tar
Uploading mysql.tar to /home/vagrant/mysql.tar
mysql.tar                                                         100%  619MB  67.5MB/s   00:09

 

 

 

▷ 이제 받은 tar 아카이브를 CentOS 에서 풀면안된다 풀지 않고 도커이미지로 만든다

>> mysql 이미지를 docker image를 받는 것처럼 레이어를 병렬로 받는다

[vagrant@docker1 ~]$ docker image load -i mysql.tar

 

# 실습 끝내고 다시 CentOS eth0 복구

[vagrant@docker1 ~]$ sudo nmcli dev connect eth0
Device 'eth0' successfully activated with '5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03'.
[vagrant@docker1 ~]$ nmcli dev s
DEVICE   TYPE      STATE      CONNECTION
eth0     ethernet  connected  System eth0
eth1     ethernet  connected  System eth1
docker0  bridge    unmanaged  --
lo       loopback  unmanaged  --

 

'Docker 와 Container' 카테고리의 다른 글

Dockerfile - EXPOSE / WORKDIR  (0) 2024.03.05
Dockerfile - ENV / LABEL  (0) 2024.03.05
Dockerfile - ENTRYPOINT / CMD  (0) 2024.03.05
Docker Network  (0) 2024.03.04
Docker 의 기본  (0) 2024.03.04
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함