도커 설치
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
만약 apt-get update가 오류가 난다면 아래 명령어를 입력해주면 됩니다.
sudo chmod a+r /etc/apt/keyrings/docker.gpg
sudo apt-get update
그 후 아래 명령어로 설치를 완료합니다
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
도커 운영체제 다운받기
docker pull <image>:<version>
그냥 원하는거 대충치니까 다 되더라구요. docker pull ubuntu:20.04 와 같이 입력하면 됩니다.
docker images
위 명령어로 다운받은 이미지를 확인할 수 있습니다.
도커 실행시키기
docker run -itd --name <name> --net <network adapter> -p <src port>:<dst port> [-p...] <image name> /bin/bash
좀 길게 쓰는 위와 같이 사용이 가능합니다. 이렇게 만든 컨테이너를 아래 명령어를 통해 들어갈 수 있습니다.
docker attach <container name || container ID>
OR
docker exec -it <container name || container ID> /bin/bash
그리고 빠져나올 때 exit를 치고 나오게 되면 컨테이너가 종료되게 됩니다. 이걸 원치않으면 control + p + q를 입력해주면 그냥 나와지게 됩니다.
docker ps [ -a]
위 명령어로 현재 실행되고 있는 컨테이너를 볼 수 있습니다.
docker stop <container name || container ID>
docker rm <container name || container ID>
docker start <container name || container ID>
현재 실행되고 있는 컨테이너를 stop으로 중지 시킬 수 있습니다. 하지만 중지시킨다고 끝이 아닙니다. docker ps -a로 확인했을 때 남아있기 때문에 새롭게 생성이 안될 것 입니다. 이럴 때 rm으로 완전히 삭제시켜줍니다. 만약 실수로 exit같은걸 쳐서 나와버렸을 땐 start로 다시 실행시킬 수 있습니다.
근데 이제 막상 컨테이너에 들어가면 vim도 없고 ifconfig도 없고 systemctl도 없고 그런데 아래와 같은 명령어로 하면 systemctl은 해결이 가능합니다.
docker run -itd --name server --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --net Anet -p 0.0.0.0:2222:22 -p 0.0.0.0:80:80 -p 0.0.0.0:53:53 ubuntu20 /usr/sbin/init
--privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro 이부분과 /usr/sbin/init은 필수로 들어가야합니다. 권한을 준다고 생각하면 편합니다.
포트를 0.0.0.0:2222:22 이런식으로 옵션을 주게되면 이 도커 서버안에서의 ssh는 22포트지만 외부에서 접속을 하기 위해서는 2222포트로 접속을 하면 포트포워딩으로 도커 안 22포트로 넘겨주게 됩니다.
위 사진과 같이 systemctl 명령어가 잘 먹히는 것을 볼 수 있습니다. 이래야지 systemctl enable <service>가 가능해서 컨테이너를 실행 시키자마자 서비스들도 켜지게 됩니다.
도커 네트워크 관리
현재 지금 있는 네트워크에 대한걸 보여줍니다. docker run 명령어에서 --net <NETWORK ID | NAME>를 적지 않았을 때 기본적으로 bridge로 설정됩니다. 만약 이럴 때 기본 도커의 가장 ipv4는 아래와 같습니다
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:b4ff:fe53:a7a7 prefixlen 64 scopeid 0x20<link>
ether 02:42:b4:53:a7:a7 txqueuelen 0 (Ethernet)
RX packets 1323 bytes 56348 (56.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1522 bytes 1821313 (1.8 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
172.17.0.1이고 기본적으로 net를 설정해주지 않으면 저기서 172.17.0.2와 같이 하나씩 늘어나게 됩니다.
아래는 네트워크를 생성하는 명령어 입니다.
docker network create --subnet <network arange> --gateway <gateway Ipv4> <NETWORK NAME>
예시로 docker network create --subnet 192.168.10.0/24 --gateway 192.168.10.254 netcard 와 같이 입력하면 설정한 IP대로 만들어지고 docker run --net netcard 이런식으로 들어게 되면 IP가 192.168.10.1과 같이 들어가게 됩니다.
위에서 예시로 만든 것의 IP를 보여드리겠습니다.
root@ubuntu:~# docker inspect Anet
[
{
"Name": "Anet",
"Id": "56c10b9b13534d94e05af9cd430fab03bf6cdb6ee11e0978c12a96b0833f73ad",
"Created": "2022-11-01T14:21:51.268503946+09:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "10.211.0.0/24",
"Gateway": "10.211.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"a9477816e0a083260fbe53bfc50fc2603669da7fbee6979c80cf0df1d03dab36": {
"Name": "server",
"EndpointID": "7aca5c8a4b0ecad82cb435819ec1ea96c5dab7ab74cb50f1b74992e3971ec59f",
"MacAddress": "02:42:0a:d3:00:02",
"IPv4Address": "10.211.0.2/24",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
IPv4에 대한 정보는 위 JSON과 같고 10.211.0.1이 gateway이기 때문에 ipv4는 10.211.0.2부터 할당된 것을 볼 수 있습니다. 위와 같은 JSON정보를 알기 위해서는 docker inspect <원하는 정보의 ID>를 입력하시면 됩니다. 컨테이너도 되고 네트워크도 됩니다.
이후에도 --link와 같은 것도 존재합니다. 이정도만 알아도 도커의 기능은 다 쓸 수 있을거 같습니다
'기능반공부 > 서버' 카테고리의 다른 글
[Vim] 알면 좋은 Vim 지식 (0) | 2023.02.17 |
---|---|
쉘 스크립트 (0) | 2022.02.11 |
[기능반] 서버구축 4. (0) | 2022.02.03 |
[기능반] 서버구축 2. (0) | 2022.01.27 |
[기능반] 서버구축 1. (0) | 2022.01.25 |