[네트워크 보안---docker] kali에 docker 설치, CentOS에 docker 설치, docker 명령에 대한 자세한 설명

1. 도커의 개념 이해

1-1 도커란 무엇인가?

Docker는 Linux 및 Windows에서 실행되며 컨테이너를 생성, 관리 및 조정하는 데 사용되는 소프트웨어입니다. Docker 플랫폼은 소프트웨어 컨테이너화 플랫폼이자 개발자가 애플리케이션과 종속성 패키지를 패키지로 패키징할 수 있는 오픈 소스 애플리케이션 컨테이너 엔진입니다. 이식 가능한 이미지를 사용하면 가상화도 달성할 수 있으며 컨테이너 간에 인터페이스가 없습니다.

일반적인 소프트웨어 설치 단계는 압축된 패키지를 다운로드 -----unzip------설치------실행하는 것인데 때로는 번거롭고 비효율적이라고 생각합니다.소프트웨어를 빠르게 설치하고 실행할 수 있는 기술이 있습니까? 그래서 Docker 기술은 우리에게 이러한 편리함을 제공합니다.

1-2 미러링이란 무엇입니까?

Docker 원격 이미지 창고 URL:

https://hub.docker.com/icon-default.png?t=N7T8https://hub.docker.com/

미러는 다른 사람이 설치한 소프트웨어로, 원격 미러 웨어하우스에서 직접 다운로드하여 실행할 수 있으므로 압축을 풀 필요가 없습니다.

로컬로 다운로드한 것을 로컬 이미지(이미지)라고 하고, 다운로드한 이미지를 실행한 후에는 컨테이너(컨테이너)라고 합니다.

또는 명령을 사용하여 원격 이미지를 직접 다운로드하고 컨테이너에서 직접 실행할 수 있습니다.

1-3 컨테이너란 무엇인가

이미지가 실행된 후에는 컨테이너라고 합니다.

1-4 도커 클라이언트 및 서버

docker를 설치하면 클라이언트와 서버가 함께 설치되는데, 클라이언트를 시작한 후 docker 명령어를 이용하여 서버를 동작시켜 원격 이미지 웨어하우스에서 이미지를 다운로드 받은 후 실행하면 됩니다.

2. 도커 설치

1-1 CentOS에 도커 설치

# centos7上面用yum安装
yum install docker -y
#启动docker
systemctl start docker
#设置开机自启
systemctl enable docker

1-2 Kali에 도커 설치

#添加docker的gpg密钥,签名用的
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -
#添加docker的apt源
echo 'deb https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/ buster stable' | sudo tee /etc/apt/sources.list.d/docker.list
#更新apt缓存
apt update
#安装docker
sudo apt-get install docker docker-compose -y
sudo apt-get install docker.io
#安装完成之后,docker就自动启动了
systemctl status docker   
#查看docker版本
docker -v  

kali2022 호스트에 데모 설치를 하고 있습니다.

1. 서명을 위해 Docker의 gpc 비밀 키를 추가하세요.

curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -

경고 걱정하지 마세요 OK가 보이면 성공입니다.

2. docker의 적절한 소스 추가

echo 'deb https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/ buster stable' | sudo tee /etc/apt/sources.list.d/docker.list

3. 적절한 캐시 업데이트

apt update

4. 도커 및 docker-compose 설치

참고: 루트 사용자는 sudo를 추가할 필요가 없습니다.

apt-get install docker.io를 사용하여 docker를 설치합니다.

## 安装docker
sudo apt-get install docker.io

## 安装docker-compose
apt-get install docker-compose -y

용 apt install docker-compose

5. 버전 확인

docker -v
docker-compose -v

3. 도커 이미지에 대한 일반적인 명령

3-1 도커 실행 명령어

원격웨어하우스에서 이미지를 다운로드하여 직접 실행하는데 사용됩니다.(명령어 하나로 다운로드 및 실행이 가능합니다.)

-d  #放后台运行
-p 端口映射 #例子: -p 宿主机端口:容器端口
--name 指定容器的名字 # docker run -it --name jaden 镜像id或者名称
--link 关联另一个容器 # 了解即可
-e MYSQL_ROOT_PASSWORD #设置容器的一些属性,了解一下即可
-it #是给运行起来的这个容器分配一个终端,就可以进入到容器内部操作了

3-1-1 사례: Nginx를 다운로드하고 실행

-d ## 백그라운드에서 실행

-p ## 포트 매핑 지정

각 이미지에는 고유한 포트가 있기 때문입니다. 예를 들어 nginx 이미지의 기본 포트는 80입니다. 이 포트는 로컬 포트와 다릅니다. 로컬 포트 ​​80을 Nginx 포트 80으로 매핑하는 것과 같은 매핑에는 로컬 포트를 사용해야 합니다. 포트;

docker run -d -p 80:80 nginx

Nginx가 다운로드되어 실행되었습니다.

브라우저 액세스 192.168.31.20:80

3-1-2 지정된 버전의 ngixn을 다운로드합니다.

참고: 로컬 포트 ​​80은 이전에 다운로드한 Nginx에 매핑됩니다. 이번 1.16 버전에서는 로컬 포트 ​​81이 미러링된 포트 80에 매핑됩니다.

docker run -d -p 81:80 nginx:1.16

Nginx1.16이 다운로드되어 실행되었습니다.

브라우저 액세스 192.168.31.20:81

다운로드할 때 메시지가 나타나는 것을 보셨나요?

"nginx1.16" 이미지를 찾을 수 없습니다. 장소 상에서

docker run 명령어는 이미지를 다운로드할 때 해당 이미지가 로컬에 있는지(다운로드되었는지) 먼저 판단하고, 없으면 원격 웨어하우스에서 다운로드하고, 로컬에 있으면 로컬에서 다운로드한 이미지를 직접 실행하기 때문입니다. 영상.

3-2 도커 검색 명령어

미러를 검색하는 데 사용됩니다. 미러를 다운로드하고 싶지만 어떤 미러가 사용 가능한지 확인하려는 경우가 있습니다. 이 명령을 사용하여 미러를 볼 수 있습니다.

docker search nginx
docker search httpd
docker search mysql

다운로드 시에는 다음과 같이 다운로드하고 싶은 이미지를 다운로드할 수 있습니다.

docker run -d  -p 3306:3306 mariadb
# 不指定版本号默认下载最新的

3-3 도커 이미지 명령

로컬 미러 목록 보기(다운로드된 미러)

2개만 배치했기 때문에 2개가 표시됩니다.

이 이미지의 ID 값인 IMAGE ID가 있습니다.

3-4 도커 풀 명령

(docker run 명령어 사용시 이미지를 직접 다운로드해서 실행했는데, 다운로드만 하고 실행하고 싶지 않은 경우에는 어떻게 해야 하나요?)

docker pull 기능은 원격 이미지를 로컬 이미지로 가져옵니다.

docker pull httpd

버전 번호를 지정하지 않으면 기본적으로 최신 버전이 다운로드됩니다.

docker 이미지를 확인하고 로컬로 다운로드되었는지 확인하세요.

3-5 도커 푸시 명령

#이미지를 업로드하고 이미지를 푸시한 후 공식 창고에 푸시합니다. 푸시는 그렇게 간단하지 않으며 그렇지 않으면 가득 차게 됩니다. 푸시하려면 로컬로 공식 계정에 로그인해야 합니다. 나중에 시연하겠습니다.

관심이 있으시면 직접 알아보실 수 있습니다. 자세한 내용은 다루지 않겠습니다.Docker 이미지 웨어하우스 URL

https://hub.docker.com/

3-6 docker rmi 명령

Remove iamge는 로컬 이미지를 삭제합니다(이미 실행 중인 이미지는 삭제할 수 없습니다. 예를 들어 이미 실행 중인 nginx를 삭제합니다).

docker rmi nginx:1.16

컨테이너 42ccd25441d9가 dfcfd8e9a5d3 이미지에 의해 실행되기 때문에 이 이미지를 삭제할 수 없다는 오류가 보고되었습니다.

dfcfd8e9a5d3 이미지는 nginx:16을 참조합니다.(docker 이미지는 이미지 ID를 확인할 수 있습니다.) 실행 후 컨테이너를 호출하여 컨테이너 ID를 할당합니다.

참고: 미러는 미러, 컨테이너는 컨테이너이며, 미러가 실행된 후 ID가 컨테이너로 변경되는 것이 아니라 미러가 실행된 후에도 미러가 여전히 그대로 존재한다는 의미라고 할 수 있습니다. 컨테이너가 생성되므로 하나의 미러가 여러 개의 독립 컨테이너를 실행할 수 있습니다.

이름이나 IMAGE ID로 이미지를 삭제할 수 있습니다.

docker rmi httpd
docker rmi 7860e7628717

여러 이미지를 동시에 삭제할 수 있습니다:

형식은 다음과 같으며, 여러 컨테이너를 공백으로 구분하여 삭제할 수 있습니다.

docker rmi tomcat:latest tomcat:jre17-temurin-jammy httpd mysql

3-7 도커 저장

이미지 내보내기 이미지를 내보내려면 이를 다른 호스트로 가져와 실행합니다. 예:

 docker save nginx:1.16 -o docker.nginx1.16.tar.gz

3-8 도커 로드

이미지 가져오기, 내보낸 이미지를 가져올 수 있습니다.

참고: 내 nginx:1.16이 이것을 실행하고 있고 이미 로컬에 존재하기 때문에 가져오기 전에 삭제해야 합니다. 그렇지 않으면 충돌이 발생할 수 있습니다.

nginx:1.16이 삭제되었습니다. 이제 방금 내보낸 내용을 가져올 수 있습니다. (자동으로 압축이 풀립니다.)

docker load -i docker.nginx1.16.tar.gz

4. 도커 컨테이너에 대한 공통 명령

4-1 도커 실행

실행 기능은 원격 저장소에서 이미지를 다운로드하여 실행하는 것뿐만 아니라, 이미지가 로컬인지 여부를 먼저 확인하고, 로컬이 아닌 경우 원격 저장소에서 다운로드하여 실행한다고 말씀드렸습니다. , 로컬 이미지는 run 명령을 사용하여 실행할 수도 있습니다.

예를 들어 새로 가져온 nginx:16을 실행합니다.

docker run -d -p  83:80 nginx:1.16

이미 진행중이니 방문하셔서 구경해보세요

4-2 docker ps 

실행 중인 컨테이너 목록 보기

도커 ps =========== 도커 컨테이너 ls

-a ## all은 모든 컨테이너를 표시한다는 의미입니다(실행 후 중지된 컨테이너도 계산됩니다). 

CONTAINER ID : 컨테이너 ID. 컨테이너 삭제는 ID 또는 NAMES를 통해 수행됩니다.

IMAGES: 이미지가 시작되는 거울

생성됨: 언제 생성되었는지

STATUS: 상태, up은 실행 중을 의미하고 Exited는 중지를 의미합니다. 위의 Nginx1.16에 대한 두 가지 지침이 있습니다. 미러는 여러 번 실행될 수 있으며 여러 컨테이너라고 합니다. < /span>

NAMES: 미러 목록을 나타냅니다. 실행 시 --name 매개변수를 사용하여 이름을 지정할 수 있습니다. 이름을 찾을 수 없는 경우 이름이 무작위로 지정됩니다. ; 이름을 지정하지 않았으므로 NAMES는 모두 무작위입니다. of 

-q ## 컨테이너 ID만 표시

docker ps -a ## 모든 컨테이너의 세부 정보 나열(이미 실행 중 + 실행 후 중지됨)

docker ps -q ## 컨테이너의 ID 번호만 나열

docker ps -a -q ## 컨테이너의 ID 번호 나열

4-3 도커스톱

실행이 중지된 컨테이너(컨테이너 ID 또는 이름을 기준으로만 삭제할 수 있음)

docker stop c0a4f676add2 


 중지가 성공했음을 나타냅니다.

실행 중인 모든 컨테이너를 중지합니다.

docker stop `docker ps -q`

 4-4 Docker 시작

컨테이너 시작(컨테이너 ID 또는 이름에 따라)

먼저 docker ps -a를 사용하여 시작되지 않은 컨테이너를 확인합니다. 이전 단계에서 docker stop `docker ps -q`를 사용하여 모든 컨테이너를 중지했기 때문에 해당 컨테이너 중 어느 것도 시작되지 않았습니다.

docker start e932acc39242

Docker ps는 성공적으로 시작되었는지 확인하고 불과 15초 전에 시작되었음을 확인합니다.

 4-5 도커 빼기

컨테이너 다시 시작(컨테이너의 ID 또는 이름에 따라)

docker restart e932acc39242

4-6 docker rm

컨테이너를 삭제하려면 중지된 컨테이너만 삭제할 수 있습니다. (docker rm -f force delete는 실행 중인 컨테이너도 삭제할 수 있습니다.)

모든 컨테이너를 보고 ID 번호(또는 NAMES)를 기반으로 실행되지 않는 컨테이너를 삭제하는 첫 번째 docker ps -a

docker rm 컨테이너 ID 또는 컨테이너 이름, 여러 개를 공백으로 구분하여 동시에 삭제합니다. up 상태에서는 직접 삭제할 수 없습니다. 강제 삭제는 up 상태의 컨테이너를 삭제할 수 있습니다. 

 docker rm -f `docker ps -a -q` #모든 컨테이너 삭제, -q는 컨테이너 ID만 표시하고 백틱 안의 명령이 먼저 실행됩니다.

4-7 도커 탑

컨테이너의 프로세스 보기(컨테이너의 ID 또는 이름에 따라)

4-8 Docker 통계

컨테이너의 리소스 사용량 확인

docker stats e932acc39242

 4-9 docker exec 

컨테이너 안으로 들어가세요

 docker exec -it 컨테이너 ID 또는 컨테이너 이름

 # 직접 대화형 명령: docker exec -it 76738703b7b2 ls # ls 명령 실행
 # 터미널 입력: docker exec -it 76738703b7b2 /bin/bash 또는 /bin/sh #/ bin /bash는 터미널 창을 열고, 종료 명령은 터미널을 종료합니다.그러나 docker 컨테이너 콘텐츠는 일반적으로 추가 소프트웨어를 설치하지 않으므로 ifconfig, ps, ip addr 등과 같은 많은 명령을 사용할 수 없습니다. /span> 

5. 도커 작성 

5-1 docker-compose 구성 파일

일반 프로젝트에서는 하나의 컨테이너로는 부족하고, 여러개의 컨테이너가 필요한데, 그냥 하나씩 다운로드해서 실행해야 할까요? 여전히 번거로운 일입니다. 동시에 여러 컨테이너를 시작할 수 있는 방법이 있습니까? 즉, docker-compose 기술을 통해 여러 컨테이너를 동시에 시작할 수 있습니다.

yum install epel-release.noarch -y
yum install docker-compose -y

#kali安装docker-compose
apt install docker-compose -y
# 查看版本
docker-compose -v

 여기에 추가 사항이 있습니다: systemctl restart docker.docker 서비스를 다시 시작하면 모든 컨테이너가 자동으로 닫힙니다.

#启动容器的时候,如果加上了--restart=always,那么重启服务之后,这个容器会自动启动
docker run -it -d --restart=always nginx:1.16  # 实现了开机自启动的效果

여러 컨테이너를 시작하려면 docker-compose.yml 파일을 구성해야 합니다.

# 포트 충돌을 피하기 위해 먼저 모든 도커 컨테이너를 닫을 수 있습니다

docker stop `docker ps -a -q`
# 为了演示方便,我们可以先创建一个wordpress文件夹,进入到里面创建一个docker-compose.yml名字的文件
mkdir wordpress
cd wordpress/
touch docker-compose.yml
vim docker-compose.yml

# 아래 내용을 파일에 복사하고 저장한 후 종료합니다. 복사할 때 표시한 주석은 주의해서 삭제하세요.
# 다음 파일 내용에는 엄격한 형식 요구 사항이 있습니다. 공백을 하나 더 추가해도 작동하지 않습니다. 들여쓰기는 계층 관계를 나타내는 데 사용됩니다. 다음 구성 구문을 yaml 구문이라고 합니다.

version: '3'  # 版本随便起名字
services:  ## 固定格式
   db:  #容器名称,可以随便指定名字
     image: mysql:5.7
     restart: always  # 开机自启动的意思
     environment: ## 一些配置参数
       MYSQL_ROOT_PASSWORD: 123456
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: 123456  # 和下面的WORDPRESS_DB_PASSWORD值要对应上
   wordpress:
     depends_on:  ## 对db容器关联,因为wordpress需要数据库
       - db
     image: wordpress:5.6  
     ports:
       - "83:80"  # 端口映射
     restart: always
     environment:
       WORDPRESS_DB_HOST: db
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: 123456

5-2 docker-compose 공통 명령어

#创建并启动
docker-compose up -d # 启动之后就可以通过浏览器访问了
#停止并删除
docker-compose down
#重启
docker-compose restart
#停止
docker-compose stop
#启动
docker-compose start

docker-compose.yml 구성 파일을 사용하면 docker-compose up -d 명령을 사용하여 구성 파일의 컨테이너 및 구성 항목에 따라 해당 컨테이너를 다운로드하고 실행할 수 있습니다.

 참고: docker-compose up -d 실행 시 반드시 이 구성 파일 경로에서 실행되어야 하며, 다른 경로일 경우 인식되지 않습니다.

 wd 폴더를 생성하고 vim docker-compose.yml을 입력하세요(이 폴더가 없으면 자동으로 생성됩니다)

구성 내용을 복사하여 붙여넣으세요.

 구성된 콘텐츠 보기

그런 다음 docker-compose.yml을 사용하여 디렉터리에서 실행하세요. 

YML 구문 형식 확인은 매우 엄격합니다. 형식에 문제가 있는 것 같아 오류를 보고했습니다. Baidu에서 직접 형식을 확인할 수 있습니다.

구성 파일 형식이 올바르면 구성 파일에 따라 해당 이미지를 다운로드하여 실행할 수 있습니다. 프로젝트에서 이 방법을 통해 필요한 컨테이너를 쉽게 시작할 수 있습니다. 

 이는 docker의 일반적인 작업이며, 문제가 발생하면 메시지를 남기거나 기술교류를 받으세요.

추천

출처blog.csdn.net/m0_67844671/article/details/132872790