?? 정리해보자
overlay2
Filesystem: extfs
루트계정으로 접속해서 /var/lib/docker의 리스트를 보면 docker에 관련된 디렉터리들을 확인할 수 있다.(buildkit, volumes.. 등등)
컨테이너가 지워지더라도 남겨야하는 DB 등의 경우는 따로 보관해야 한다. (/data에 마운트)
- compose 만들기
curl -SL https://github.com/docker/compose/releases/download/v2.14.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
- compose 권한주기
sudo chmod +x /usr/local/bin/docker-compose
- compose 확인
docker-compose --version
- 레지스트리 운영
docker run -d -p 5000:5000 --restart always --name registry registry:2
docker pull httpd:latest
- 태그 변경
docker tag httpd:latest localhost:5000/httpd:latest
docker push localhost:5000/httpd:latest
- 경로확인
/var/lib/docker/volumes/6999de9b8cbbc4f12e8f46c2dff019f915dc127f0a80f058fc7380a39cf519c0/_data/docker/registry/v2/repositories/httpd
root@node2:/var/lib/docker/volumes/6999de9b8cbbc4f12e8f46c2dff019f915dc127f0a80f058fc7380a39cf519c0/_data/docker/registry/v2/repositories/
mkdir resource
cat > dockerfile
FROM debian
MAINTAINER kwjeon31 <kwjeon31@gmail.com>
run apt-get update; apt-get install -y stress
CMD ["bin/sh", "-c", "stress -c 2"]
docker build -t stress .
docker run -m 100m --memory-swap 100m stress:latest stress --cpu 2 --io 4 --vm-bytes 90m --timeout 1
1. ip addr 로 도커 기본 ip 확인
2. 여러개의 콘솔에서
docker run -it --name c1 busybox
docker run -it --name c2 busybox
docker run -d -p 80:80 --name web1 nginx:latest
로 컨테이너 여러개 실행하기
3. 루트 권한으로 iptables -L -v 을 통해 ip들을 확인하고 개별적으로 docker inspect $컨테이너이름 으로 개별 ip 확인한다.
docker index.html 실습
docker run -d --name web -v /home/guru/workspace/webdata:/var/share/nginx/html -p 80:80 nginx:latest
이때 절대경로로 설정에 주의할 것
curl localhost:80
docker cp ./index.html web:/usr/share/nginx/html
curl localhost:80
index.html의 내용으로 바뀐것을 볼 수 있다.
docker run --name web1 -d -p 80:80 nginx:1.14
docker run --name web2 -d -p 80 nginx:1.14
docker run --name web3 -d nginx:1.14
위 세개의 컨테이너를 만들고 각각 포트를 확인해 보면
첫번째는 80, 두번째는 임의 적용, 세번째는 없음
mkdir datashare
cd datashare/
cat > df.sh
#!/bin/bash
mkdir -p /webdata
while true
do
df -h / > /webdata/index.html
sleep 10
done
cat > dockerfile
FROM ubuntu:18.04
ADD df.sh /bin/df.sh
RUN chmod +x /bin/df.sh
ENTRYPOINT ["/bin/df.sh"]
docker build -t smlinux/df:latest .
docker run -v /webdata:/webdata -d --name df smlinux/df:latest
docker run -d --name web -v /webdata:/usr/share/nginx/html:ro -p 80:80 nginx:latest
- 네트워크 만들기(mynet)
docker network create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.254 mynet
- busybox 만들고 실행
docker run -it --name c1 --net mynet --ip 192.168.100.100 busybox
ip addr
docker inspect c1에서 mynet에 IPAMConfig에 할당한 ip가 잘 들어있는지 확인
- 클라이언트
docker run -d --name wordpressdb -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql:5.7
- 서버
docker run -p 80:80 -d --name wordpress -e WORDPRESS_DB_PASSWORD=root --link wordpressdb:mysql wordpress
(--link로 서로를 연결)
curl localhost:80
docker exec -it wordpressdb /bin/bash 후
mysql -u root -p 로 mysql 접속 가능
cd
mkdir composetest
cd composetest/
cat > app.py
...
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
...
cat > requierments.txt
...
flask
redis
...
cat > dockerfile
...
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
...
cat > docker-compose.yml
...
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"
...
- .yml 파일을 실행한다
docker compose up -d
- 결과 확인하기
curl localhost:5000
docker compose up -d --scale redis=3