티스토리 뷰

Docker를 사용하는 이유

- 컨테이너 이미지를 만들기 쉽다.

- 이미지를 저장소를 이용해 쉽게 공유 할 수 있다.

- 컨테이너를 관리하기위한 강력한 도구 제공

- 네트웍을 고려할 수 있다.

- 유연한 스토리지 사용

 

docker지우기(ubuntu)

sudo apt-get remove docker docker-engine docker.io containerd runc

설치 가능한 docker버전 보기

apt-cache madison docker-ce

이미지 찾기

docker search alpine

alpine이라는 이미지를 찾습니다.

 

이미지 보기

docker images

이미지 삭제

docker rmi -f <image_id>

이미지 전체 지우기

docker rm -vf $(docker ps -a -q)

docker rmi -f $(docker images -a -q)

디스크 용량 확인

df -h

 

모든 정지된 컨테이너 지우기

docker system prune

 

 

정지된 이미지 삭제

docker container prune

 

어떤 container도 안쓰는 이미지 삭제

docker image prune -a 

 

이미지 빌드하기

docker build -t <이미지명> <dockerfile의 위치>

 

ex)

docker build -t spring-docker .

docker build -t vue-app .

 

-e로 ENV넘기기

docker run your-docker-container -e SPRING_PROFILES_ACTIVE='dev,swagger' -p 8080:8080

컨테이너 떳는지 확인

docker container ls

컨테이너 죽이기

docker kill <container_name>

 

모든 컨테이너 내리기

docker stop $(docker ps -a -q)

centos에 git설치하고 다시 띄우기

docker pull centos

docker run -i -t centos

[root@4asdf133333 /]# <--- 이렇게 나옴

yum install git

exit

docker commit 4asdf133333 git-centos

docker run -i -t git-centos

# demon으로 띄우기
docker run -d -i -t centos

docker pull ubuntu

docker run -i -t ubuntu

명려어 실행하면서 컨테이너 돌리기

docker container run <image_name> ls -l

ex)
docker container run ubuntu-kub ls -l

컨테이너 start

docker container start 1ac014498c3a
docker container exec 1ac014498c3a ls

1ac014498c3a인 컨테이너를 띄우고 여기에 ls명령어를 날린다.

docker container exec -it 1ac014498c3a sh
1ac014498c3a인 컨테이너의 sh에 붙는다. sh를 붙여줄 것.

컨테이너 한번에 내리기

docker container ls -q
docker container rm &(docker container ls -a -q)

nginx띄우기

docker run -p 80:80  --name mynginx2 nginx

 

Daemon으로 띄우기(port 포워딩을 안해줘서 접근은 불가)

docker run -d --name mynginx nginx

 

 

port와 연결하기

docker container run -d --name mynginx -p 8080:80 nginx
호스트의 8080포트를 컨테이너의 80포트와 연결한다

mynginx의 특정 디렉토리의 파일을 로컬로 copy하기

docker container cp mynginx:/etc/nginx/conf.d/default.conf .

로컬에 있는 index.html을 container로 copy하기

docker container cp index.html mynginx:/usr/share/nginx/html/index.html

 

DB

MSSQL띄우기

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Skull034456' -p 1433:1433 --name jungho -d mcr.microsoft.com/mssql/server:2022-latest

 

SSL이슈로 연결 안될 때

# datasource url뒤에 encrypt=false; 추가하기
jdbc:sqlserver://아이피:포트;databaseName=DB명;encrypt=false;

 

 

MySql띄우기

(명령어로 잘 안되니 아래 docker-compose로 시도 하는 것을 권장합니다)

docker run -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=1 mysql
-p로 port를 꼭 바인딩 해줘야 한다. 그리고 -e로 옵션 넘겨줘서 패스워드 쓸건지 empty로 할껀지 결정 해야 합니다.

docker run  -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password mysql
패스워드 쓸꺼면 위와 같이 하면 됩니다.

 

Volume마운트 해서 MySql 띄우기

/var/lib/mysql은 container에서 mysql의 데이터가 저장되는 곳 입니다.

$ mkdir ~/mysql_data

 

docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password1 -d -v ~/mysql_data:/var/lib/mysql --name mysql mysql

 

 

3306번 쓰고 있는 경우 확인

서비스에 이미 띄워놓은 경우 내리고 띄워야 합니다. 사용중이라면 내리면 안되기 때문에 사용중인지 꼭 확인 해주세요.

netstat -nlpt | grep 3306
sudo service mysql status
sudo service mysql stop

 

docker-compose로 MySql 띄우기

docker-compose.yml

version: '3.1'
services:
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 12345678
    ports:
      - 3306:3306

docker-compose up

 

 

docker volume

도커 volume은 도커가 설치된 서버의 특정 디렉토리 입니다.

docker volume create kong-vol

docker volume inspect kong-vol

 

 

volume마운트 해서 띄우기 -v host_path:container_path

mkdir ~/nifi_tmp

docker run -d -P -h nifi -p 38080:8080 -p 38181:8181 \ 
--name nifi_1.4.0 --memory=4g \ 
-v ~/nifi_tmp/:/tmp/  apache/nifi:1.4.0

-v옵션 뒤에 <host_path>:<container_path>를 주면 마운트 됩니다. 여기에서 host_path는 docker가 설치된 머신이고 container_path는 docker위에 뜨는 container의 path를 말합니다.

 

docker run --name postgres-container -d --restart unless-stopped \
  -p 5432:5432 -e POSTGRES_PASSWORD=1@3456 \
  -v ~/postgre_temp:/var/lib/postgresql/data postgres:13.3

위 명령어의 경우 mac에서 띄운 명령어 입니다. /Users/kyeongrok/postgre_temp를 컨테이너 안에 /var/lib/postgresql/data에 마운트 한다는 뜻입니다.

 

linux에서 띄우기

docker run --name postgres-container -d --restart unless-stopped 
-p 5432:5432 -e POSTGRES_PASSWORD=1@#456  
-v ~/postgre_data:/var/lib/postgresql/data postgres:13.3

 

엘라스틱서치의 데이터 경로

/usr/share/elasticsearch/data

엘라스틱서치 띄우기

docker run -d --name elasticsearch --net hwannetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.10.1 -v /elastic_tmp/:/usr/share/elasticsearch/data

 

컨테이너 로그 보기

docker logs [container name]

 

 

특정 컨테이너가 종료된 경우 로그 보기

mysql이 자꾸 죽어서 로그를 보는 법을 찾아 보았습니다.

 

-a 옵션을 써서 mysql의 컨테이너를 모두 봅니다. Exited로 나오네요.

 

docker container ls -a | grep mysql

가장 최근 container인 3914bac8a627 의 로그는 아래와 같이 확인 합니다.

 

docker logs 3914bac8a627

 

마지막 50줄 로그 보기

docker logs --tail 50 3914bac8a627

 

아래 로그를 보니 root user가 shutdown명령을 내렸다고 나오네요.

2022-10-21 02:22:00+00:00 [Note] [Entrypoint]: Stopping temporary server
2022-10-21T02:22:01.006922Z 10 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.30).
2022-10-21T02:22:02.274166Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.30)  MySQL Community Server - GPL.
2022-10-21 02:22:03+00:00 [Note] [Entrypoint]: Temporary server stopped

2022-10-21 02:22:03+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.

 

 

 

이미지 다운로드 받기

은행권 프로젝트를 하는 경우나 폐쇄망에 이미지를 반입해야 하는 경우 아래명령어로 이미지를 .tar파일로 저장할 수 있습니다.

docker pull ibmcom/db2:latest

docker save ibmcom/db2 > db2image.tar

 

로드

docker load < db2image.tar

 

 

도커의 cpu 메모리 사용량 확인하기

docker stats

 

docker 배포 스크립트.sh

CONTAINER_REGISTRY와 PROJECT_NAME을 파라메터로 넘기면 해당 container registry를 pull하는 스크립트

#!/bin/bash    
set -ex
CONTAINER_REGISTRY=$1
PROJECT_NAME=$2
echo $(date) CONTAINER_REGISTRY:$CONTAINER_REGISTRY-PROJECT_NAME:$PROJECT_NAME

docker pull $CONTAINER_REGISTRY:latest | grep "Image is up to date" && pull_status="already_pulled" || pull_status="newly_pulled"

echo $pull_status

if [ "$pull_status" = "newly_pulled" ]; then
        docker stop $PROJECT_NAME
        docker rm -f $PROJECT_NAME
        docker run -p 8081:8080 --name $PROJECT_NAME -e TZ=Asia/Seoul -e SPRING_DATASOURCE_URL=jdbc:mysql://<db_host>:3306/hospital-review2 -e SPRING_DATASOURCE_PASSWORD=<password> -d $CONTAINER_REGISTRY
        docker image prune -f
fi

 

Container시간 맞추기

아래와 같이 timezone을 environment variable로 넘기면 됩니다.

docker run --rm -e TZ=Asia/Seoul debian:jessie date

https://forgiveall.tistory.com/591

 

 

Inspect - Container정보 보기

컨테이너를 띄울 때 넘겼던 정보를 나중에 다시 확인해볼때 사용하는 명령어 입니다.

docker inspect <container_id>
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함