기술나눔

도커 요약

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

환경을 준비합니다.

  • VM웨어17
  • Ubuntu18.04(LTS):https://releases.ubuntu.com/18.04/ubuntu-18.04.6-desktop-amd64.iso

1. 도커 미리보기


도커 관련 문서:

  • 도커 공식 홈페이지 주소: https://www.docker.com/
  • 도커 문서 주소: https://docs.docker.com/
  • 도커 이미지 창고: ​​https://hub.docker.com/

행복한 도커

1. 도커란: 컨테이너를 쉽게 관리할 수 있는 오픈소스 컨테이너 엔진으로, 샌드박스 메커니즘을 사용해 컨테이너를 서로 격리시킨다.

2. Docker가 해결하는 문제: 소프트웨어 환경의 마이그레이션 문제를 해결합니다.

3. 컨테이너와 가상 머신의 차이점:

  • 컨테이너: 애플리케이션의 추상화(코드와 종속성을 함께 패키징)로 리소스를 적게 차지하고 시작이 빠르며 가볍고 유연합니다.
  • 가상 머신: 물리적 하드웨어를 추상화한 것입니다(하나의 서버를 여러 서버로 전환). 이는 많은 리소스를 차지하며 규모가 크고 강력합니다.

이미지-20240706011000322

4. 도커 저장소:

  • 마운트 디렉터리, 예: -v /宿主机目录:容器目录
  • 데이터 볼륨 매핑 예:数据卷:容器目录

5. Docker 네트워크: 안정적인 도메인 이름으로 호스트 이름 액세스를 달성하기 위해 사용자 정의 네트워크를 만듭니다. (동일한 네트워크에 있는 컨테이너간 통신 가능)

#示例
#自定义网络
docker network create mynet
#主节点
docker run -d -p 6379:6379 
-v /app/rd1:/bitnami/redis/data 
-e REDIS_REPLICATION_MODE=master 
-e REDIS_PASSWORD=123456 
--network mynet --name redis01 
bitnami/redis

#从节点
docker run -d -p 6380:6379 
-v /app/rd2:/bitnami/redis/data 
-e REDIS_REPLICATION_MODE=slave 
-e REDIS_MASTER_HOST=redis01 
-e REDIS_MASTER_PORT_NUMBER=6379 
-e REDIS_MASTER_PASSWORD=123456 
-e REDIS_PASSWORD=123456 
--network mynet --name redis02 
bitnami/redis
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

2. 도커 설치


이 글은 Ubuntu 환경 설치를 기준으로 작성되었습니다. 권한이 부족할 경우 앞에 sudo만 추가하시면 됩니다.

1. 방화벽을 끕니다. (이후 외부 액세스를 위해 포트를 수동으로 노출할 필요가 없으므로 테스트에 편리합니다.)

sudo ufw disable

#关闭防火墙:sudo ufw disable
#查看防火墙状态:sudo ufw status
#开启防火墙:sudo ufw enable
  • 1
  • 2
  • 3
  • 4
  • 5

2. 도커 설치

#卸载旧版docker
sudo apt-get remove docker docker-engine docker.io containerd runc

#更新软件包
sudo apt-get update

#安装一些工具
sudo apt-get install 
    apt-transport-https 
    ca-certificates 
    curl 
    gnupg-agent 
    software-properties-common

#安装docker
sudo apt install docker.io 

#验证dokcer是否安装成功
docker --version

#启动& 开机启动docker; enable + start 二合一
sudo systemctl enable docker --now

#配置阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]
}
EOF

#重新加载配置
sudo systemctl daemon-reload
#重启docker服务
sudo systemctl restart docker
  • 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
  • 31
  • 32
  • 33
  • 34
  • 35

3. 일반적인 Docker 명령


이미지-20240706032721566

1. 도커 서비스 상태 관리:

  • systemctl status docker: docker의 실행 상태를 봅니다.
  • systemctl stop docker: 도커를 닫습니다.
  • systemctl start docker: 도커 시작
  • systemcl restart docker: 다시 시작 docker
  • systemctl 활성화 docker: 부팅 시 docker가 자동으로 시작되도록 설정

2. 도커 이미지 관리:

  • 이미지 검색: docker 검색 이미지 이름
  • 이미지 가져오기: docker pull 이미지 이름: tag 태그를 지정하지 않으면 가장 최근의 이미지를 가져옵니다.
  • 이미지 보기: 도커 이미지
  • 이미지 삭제: docker rmi 이미지 이름: 태그

3. 도커 컨테이너 관리:

  • 컨테이너 생성: docker run -di --name=container name 이미지 이름: tag
  • 컨테이너를 닫습니다: docker stop 컨테이너 이름
  • 컨테이너 시작: docker start 컨테이너 이름
  • 컨테이너 삭제: docker rm 컨테이너 이름
  • 컨테이너 보기:
    • docker ps -a 실행되지 않는 컨테이너를 포함하여 모든 컨테이너 보기
    • 실행 중인 컨테이너를 보려면 docker ps
  • 컨테이너 입력: docker exec -it 컨테이너 이름/bin/bash

4. Docker 데이터 볼륨:

  • 데이터 볼륨: docker에서 관리하는 폴더입니다.

  • 데이터 볼륨 사용: 데이터 볼륨을 컨테이너의 경로에 바인딩하여 컨테이너와 호스트 간의 양방향 자동 파일 전송을 실현할 수 있습니다.

    파일을 호스트의 데이터 볼륨에 넣습니다. docker는 자동으로 파일을 컨테이너에 동기화합니다.

    컨테이너의 파일이 변경되면 docker는 해당 파일을 호스트의 데이터 볼륨에 자동으로 동기화합니다.

  • 데이터 볼륨 작업 명령:

    데이터 볼륨 나열: docker Volume ls

    데이터 볼륨 생성: docker 볼륨 데이터 볼륨 이름 생성

    데이터 볼륨 세부 정보 보기(실제 경로): docker 볼륨 검사 데이터 볼륨 이름

    데이터 볼륨 삭제: docker 볼륨 rm 데이터 볼륨 이름

  • 컨테이너를 생성하고 데이터 볼륨을 바인딩합니다.

    docker run -di --name=컨테이너 이름 -v 데이터 볼륨 이름: 컨테이너 이미지 이름의 경로: 태그

    docker run -di --name=컨테이너 이름 -v 호스트의 경로: 컨테이너 이미지 이름의 경로: 태그

    참고: -v 매개변수의 모든 경로는 절대 경로여야 합니다.

5. 미러 백업:

  • 이미지 내보내기: docker save -o 파일 이름 이미지 이름
  • 이미지 로드: docker load -i xxx.tar

4. 도커파일


문서: https://docs.docker.com/reference/dockerfile/

Dockerfile 역할: 사용자 정의 이미지를 생성합니다.

Dockerfile은 기본 이미지를 기반으로 일련의 도커 명령어를 작성하며, 각 명령어는 이러한 명령어를 레이어별로 구축하여 최종적으로 대상 이미지를 구축합니다.

일반적인 지침효과
에서이미지 기반 환경 지정
달리다사용자 정의 명령 실행
커맨드컨테이너 시작 명령 또는 매개변수
상표맞춤 라벨
폭로하다노출된 포트 지정
환경환경 변수
추가하다이미지에 파일 추가
복사이미지에 파일 복사
진입 지점컨테이너 고정 시작 명령
용량데이터 볼륨
사용자사용자 및 사용자 그룹 지정
작업 방향기본 작업 디렉터리 지정
아르그빌드 매개변수 지정

예:

#编写dockerfile文件
vim Dockerfile
FROM openjdk:17
LABEL author=aopmin
COPY app.jar /app.jar   #把jar包复制到容器的根目录下
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]  #运行命令

# 构建镜像
docker bulid -f Dockerfile -t 镜像名:tag .
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

5. 서비스 오케스트레이션


서비스 오케스트레이션 또는 컨테이너 오케스트레이션: 특정 비즈니스 규칙에 따라 컨테이너를 일괄적으로 관리합니다.

Docker Compose는 여러 Docker 컨테이너를 정의하고 실행하기 위한 오케스트레이션 도구입니다.

하나의 명령으로 여러 컨테이너를 시작할 수 있습니다. 주로 컨테이너를 관리하고 조정하는 방법에 대한 문제를 해결합니다.

Docker Compose를 사용하는 세 단계는 다음과 같습니다.

  1. Dockerfile을 사용하여 실행 환경 정의(미러가 이미 있는 경우 이 단계를 생략할 수 있음)
  2. 사용docker-compose.yml애플리케이션을 구성하는 서비스 정의
  3. 달리다docker-compose up -d신청 시작

docker-compose를 설치합니다.

# 下载docker compose
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 设置权限
chmod +x /usr/local/bin/docker-compose

# 查看版本 
docker-compose -version
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

docker-compose를 제거하려면 다음 명령을 실행할 수 있습니다.

# docker compose是二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose
  • 1
  • 2

docker-compose의 일반적인 명령:

# !!!注意:必须先切换到`docker-compose.yaml`文件所在的目录后,才可以执行以下命令!!!

#创建容器并后台启动
docker-compose up -d

#直接启动容器
docker-compose start

#其它命令:
docker-compose help # 查看帮助
docker-compose stop  # 停止容器
docker-compose start # 启动容器
docker-compose restart # 重启容器
docker-compose rm # 删除已停止的容器
docker-compose down # 停止并删除容器
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

예:

1. docker-compose 디렉터리 생성

mkdir ~/docker-compose
cd ~/docker-compose
  • 1
  • 2

2. 쓰기docker-compose.yaml문서

version: "3.0"
services:
  redis:
    container_name: redis 
    image: redis:5.0
    ports:
      - 6379:6379
  nginx:
    container_name: nginx
    image: nginx:1.14.2
    ports:
      - 80:80
    volumes:
      - /root/volumes/nginx/html:/usr/share/nginx/html
  tomcat:
    container_name: tomcat
    image: tomcat:8.5.88
    ports:
      - 8080:8080
    volumes:
      - /root/volumes/tomcat/webapps:/usr/local/tomcat/webapps
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3. 시작

# !!!注意:必须先切换到有`docker-compose.yaml`文件所在的目录后,才可以执行以下命令!!!
cd ~/docker-compose

# docker-compose up -d 以守护进程方式创建并启动容器
docker-compose up -d
  • 1
  • 2
  • 3
  • 4
  • 5