Amazon Linux는 Amazon Web Services (AWS)에서 제공하는 Linux 배포판입니다. Amazon Linux는 주로 CentOS와 Fedora와 유사한 RHEL (Red Hat Enterprise Linux) 계열에 기반을 두고 있습니다.
sudo yum update
따라서, Amazon Linux에서는 apt 대신 yum을 사용하여 패키지 관리 작업을 수행합니다.
sudo yum -y install \
> apt-transport-https \
> ca-certificates \
> curl \
> gnupg-agent \
> software-properties-common
apt-transport-https: Amazon Linux에서는 apt 패키지 관리자를 사용하지 않기 때문에 이 패키지는 필요하지 않습니다.
gnupg-agent: GnuPG 에이전트에 관련된 패키지를 설치하려면:
sudo yum install gnupg2
sudo yum -y install \
ca-certificates \
curl \
gnupg2
Amazon Linux 2에서는 아래와 같이 Docker를 직접 설치할 수 있습니다.
sudo yum install docker
sudo service docker start
sudo usermod -a -G docker ec2-user
마지막 명령어는 ec2-user를 docker 그룹에 추가하여 Docker 명령어를 sudo 없이 실행할 수 있게 합니다. 그런 다음, 로그아웃하고 다시 로그인하여 변경 사항을 적용합니다.
sudo systemctl enable docker
#docker 에서 제공하는 shell script를 이용한 자동 설치
~$ curl -fsSL https://get.docker.com -o get-docker.sh
# shell script 내용 확인 후 변경 가능
~$ sudo vi get-docker.sh
# 실행 권한 부여
~$ chmod +x get-docker.sh
# 설치
~$ sudo sh get-docker.sh
~$ dpkg -l | grep -i docker
~$ sudo apt-get purge -y docker.io
~$ sudo apt-get autoremove -y --purge docker.io
~$ sudo apt-get autoclean
~$ sudo apt purge docker-ce
# Host에 image, directory, 볼륨, 또는 사용자 생성 구성 파일을 제거
~$ sudo rm /etc/apparmor.d/docker
~$ sudo rm -rf /var/lib/docker
~$ sudo groupdel docker
~$ sudo apt-get purge docker-engine
~$ sudo apt-get autoremove --purge docker-engine
gVisor는 구글에서 개발한 경량화된 컨테이너 런타임으로, 컨테이너를 위한 추가적인 격리를 제공하여 보안을 강화합니다. 전통적인 컨테이너 (예: Docker 컨테이너)는 호스트 시스템의 리소스를 직접적으로 공유하는 반면, gVisor는 컨테이너화된 애플리케이션 사이와 호스트 시스템 사이에 격리 계층을 추가합니다.
경량화된 커널: gVisor는 그 자체로 경량화된 커널을 가진다. 이 커널은 실제 리눅스 커널이 아니지만, 애플리케이션에게는 그렇게 보이며, 이러한 방식으로 시스템 호출을 가로채고 처리한다.
보안: gVisor는 호스트 시스템과 애플리케이션 간의 추가적인 격리를 제공하여 potable hole이라고 불리는 보안 취약점을 방지합니다.
호환성: gVisor는 대부분의 리눅스 시스템 호출을 지원하므로, 많은 애플리케이션들이 변경 없이 그대로 실행될 수 있습니다.
성능: gVisor는 추가적인 격리 계층을 제공하기 때문에 일부 시나리오에서는 전통적인 컨테이너보다 약간의 오버헤드가 발생할 수 있습니다.
통합성: gVisor는 Docker 및 Kubernetes와 같은 표준 컨테이너 툴체인과 통합될 수 있습니다.
간단히 말해서, gVisor는 컨테이너화된 애플리케이션의 보안을 강화하기 위해 개발된 도구로, 기존의 컨테이너 런타임과 비교하여 높은 수준의 격리를 제공합니다.
docker inspect sys-container-1 | grep -i ipaddress
docker inspect sys-container-1 | grep -i ipaddress
docker container ip Address 확인하는 명령어
veth48c1a3f: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::70fa:1eff:feb6:4272 prefixlen 64 scopeid 0x20<link>
ether 72:fa:1e:b6:42:72 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10 bytes 796 (796.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vethbb7f4f9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::b4e6:84ff:fe83:733b prefixlen 64 scopeid 0x20<link>
ether b6:e6:84:83:73:3b txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16 bytes 1268 (1.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[ec2-user@ip-172-31-36-185 ~]$ docker run -d -p 8001:80 --name=webserver1 nginx:1.25.0-alpine
docker-proxy
- NAT, NAPT 기술을 가지고 있다.
mkdir LABs && cd $_
vi index.html
docker cp index.html webserver1:/usr/share/nginx/html/index.html
vi Dockerfile
FROM nginx:1.25.0-alpine
COPY index-image.html /usr/share/nginx/html/index.html
COPY docker_logo.png /usr/share/nginx/html/docker_logo.png
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
docker build -t myweb:v1.0 .
docker images
docker run -d -p 8002:80 --name=my-webserver2 myweb:v1.0
CMD ["nginx", "-g", "daemon off;"]
- image 에서 container로 변경되면 정적 -> 동적
- 동적환경에서 핵심은 container 자체에서 프로세스가 동작한다는게 핵심
- nginx Application container는 nginx daemon 자체가 그 컨테이너의 주인이기 때문에 반드시 nginx daemon이 켜져야 한다.
- 그래서 CMD 키워드는 대부분 실행 명령어가 들어간다.
새로운 base image를 사용하는 경우에는 hub.docker.com에서 해당 이미지를 찾아 설명을 읽고 사용하는 것을 권장한다.
~$ docker pull mysql:5.7-debian
~$ docker images
~$ docker run -it -e MYSQL_ROOT_PASSWORD=pass123# mysql:5.7-debian /bin/bash
root@~~~:/# cat /etc/os-release
root@~~~:/# /etc/init.d/mysql start
## 종료된 mysql docker container에 다시 들어가는법
docker start (container id or name)
docker exec -it (container id or name) bash
## container 가 꺼졌기 떄문에 mysql 다시 재실행
/etc/init.d/mysql start
mysql -uroot -p
~$ docker run --name mariadb -e MYSQL_ROOT_PASSWORD=sjin -d \
> -e MARIADB_DATABASE=item -p 3306:3306 mariadb:10.2
~$ docker ps
~$ docker exec -it mariadb /bin/bash
root@~~~~:/# service mysql start
root@~~~~:/# mysql -uroot -p
portainer 링크 : portainer.io
docker pull portainer/portainer-ce
docker volume create portainer_data
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data --restart=always portainer/portainer-ce
docker ps | grep portainer
# 접속은 서버 IP:9000으로 크롬으로 접속한다.
[root@ip-172-31-41-55 my-diary-3-proxy]# sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
[root@ip-172-31-41-55 my-diary-3-proxy]# sudo chmod +x /usr/local/bin/docker-compose