Docker 설치 및 응용
Docker 는 가상 용기 기술 로 본질 적 으로 홈 호스트 에서 실행 되 는 프로 세 스 (공유 커 널) 로 네 임 스페이스 (Namespaces) 를 통 해 자원 격 리 를 실현 하고 CGroups (Control Groups) 를 통 해 자원 의 한 도 를 실현 하 는 동시에 쓰기 시 복사 (copy - on - write) 를 통 해 효율 적 인 파일 작업 을 수행 합 니 다.
Namespaces 격 리: 파일 시스템, 네트워크, 프로 세 스 간 통신, 호스트 이름, 프로 세 스 번호, 사용자 권한
CGroups 한도: CPU, 메모리, 디스크 I / O, 대역 폭
copy - on - write: 여러 용기 사이 에 미 러 를 공유 합 니 다.
1. docker 설치
1. 설치
설치 하기 전에 docker 가 설치 되 어 있 는 지, 그리고 Liux 커 널 이 요 구 를 만족 시 키 는 지 확인 합 니 다.
# docker
$ docker -v
# , >3.10
$ uname -r
1.) 빠 른 설치
아래 단축 명령 으로 설치
$ curl -sSL https://get.docker.com/ | sh
2.) 수 동 설치
패키지 에 의존 하여 수 동 으로 설치 할 수도 있 습 니 다 (centos 를 예 로 들 면)
# yum
$ sudo yum update
#
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# docker
$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# docker,
$ yum list docker-ce --showduplicates | sort -r
$ sudo yum install docker-ce
2. docker 마 운 트 해제
# Ubuntu|Debian
$ sudo apt-get remove docker-ce docker-ce-cli
# centOS
$ sudo yum remove docker docker-common docker-selinux docker-engine container-selinux
Docker 마 운 트 해제 기본 값 은 원래 Docker 의 미 러, 네트워크, 저장 볼 륨 등 을 유지 합 니 다. Docker 를 새로 설치 하려 면 디 렉 터 리 / var / lib / docker 를 삭제 해 야 합 니 다.
3. docker 서비스
# /
$ sudo systemctl start docker
$ sudo systemctl stop docker
#
$ sudo systemctl enable docker
2. docker 상용 명령
docker 시스템 설정 정보 보기
$ sudo docker info
1.) sudo 권한 설정
docker 명령 을 사용 할 때마다 sudo 가 필요 합 니 다. 귀 찮 습 니 다. 다음 명령 을 통 해 현재 사용 자 를 docker 부속 그룹 에 추가 할 수 있 습 니 다.
$ sudo usermod -aG docker #
2.) 용기 / 미 러 보기
$ docker ps #
$ docker images #
#
$ docker inspect xxx
# top
$ docker top xxx
3.) 미 러 다운로드
용 기 를 만 들 기 전에 원 격 미 러 를 내 릴 수도 있 고 만 들 때 다운로드 할 수도 있 습 니 다.
#
$ docker search xxx
#
$ docker pull xxx
4.) 새 용기
최소 매개 변수 생 성
# -d: ,-it: , console
$ docker run -d -it --name --restart always
더 많은 매개 변수: 맵 포트, dns, 지속 적 인 저장 볼 륨, 프로 세 스 초기 화 용기 종료 방지
# -p: ,--dns: dns (/etc/resolv.conf),-v: ( ),/bin/sh: ,
$ docker run -dit -p : --dns=8.8.8.8 --name -v : --restart always : /bin/sh
docker 에 centos 를 설치 하면 systemctl 명령 관리 프로 세 스 를 사용 할 수 없습니다. 다음 오 류 를 보고 하 십시오. D - Bus 연결 을 받 지 못 했 습 니 다.
원인: systemd 프로 세 스 를 시작 할 수 있 는 특권 이 필요 합 니 다. 솔 루 션:
docker run -dit --privileged init
5. 용기 시동 / 정지
$ docker start | restart xxx # /
$ docker stop xxx #
$ docker kill xxx # ,
6.) 용기 에 들어간다
# /bin/sh /bin/bash sh bash
$ docker exec -it xxx /bin/sh
#
$ docker exec -it xxx sh -c "chmod +x ./app/entry.sh && ./app/entry.sh"
7. 용기 / 미 러 삭제
#
$ docker stop xxx
$ docker rm xxx
#
$ docker rm xxx -f
#
$ docker rmi xxx # -f
8. 용기 / 미 러 이름 변경
#
$ docker rename
#
$ docker tag # , id
$ docker rmi
3. 미 러 구축
1. 수 동 으로 미 러 구축
기본 미 러 로 용 기 를 만 들 고 수 동 으로 모든 것 을 설치 한 다음 용기 로 미 러 를 만 듭 니 다.
$ docker commit
2. 미 러 자동 구축: Dockerfile
1.) Dockerfile 설정
새 Dockerfile 을 만 들 고 관련 내용 을 설정 합 니 다. 다음은 alpine 기반 pm2 를 설정 하고 node 응용 을 실행 하 는 것 을 예 로 들 겠 습 니 다.
#
FROM alpine
#
MAINTAINER hoby
#
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' > /etc/timezone
# RUN : ,
RUN echo 'nameserver 8.8.8.8' >> /etc/resolv.conf \
&& sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
&& apk add --update-cache bash \
&& apk add bash \
&& apk add nodejs && apk add npm \
&& npm config set registry https://registry.npm.taobao.org
# ,
WORKDIR /app
#
ENV NODE_ENV=production
# www.js entrypoint.sh
COPY ./app /app
# COPY , ADD
#ADD ./x.tar.xz /app
# entrypoint
RUN chmod a+x ./entrypoint.sh
# , docker run
ENTRYPOINT ["/bin/sh", "./entrypoint.sh"]
# , docker run
#CMD ["/bin/sh"]
#
EXPOSE 3000
예제 관련 파일:
./app/www.js
// node server
var http = require('http')
http.createServer((req, res) => {
res.end('hello world!')
}).listen(3000)
console.log('node server is running at 3000...')
./app/entrypoint.sh
#!/bin/bash
node /app/www.js
미 러 구축:
$ docker build -t myimage:latest . # ,'.' Dockerfile
용기 새로 만 들 고 시작 하기:
$ docker run -dit -p 8000:3000 --dns=8.8.8.8 --name --restart always myimage:latest
2.) Dockerfile 구축 요약
a. 구축 할 때 패 키 지 를 다운로드 할 수 없 으 며, 용기 dns 가 잘못 되 었 음 을 설명 합 니 다. / etc / resolv. conf 를 수정 해 야 합 니 다.
b. alpine 미 러 기본 sh 터미널, bash 설치
c. 하나의 용기 에서 하나의 응용 만 실행 하 는 것 을 권장 합 니 다. 여러 응용 은 다음 copose 배 치 를 참조 하 십시오.
d. Docker 미 러 구축 은 레이 어 링 으로 여러 RUN 명령 을 통합 합 니 다.
e. - v 영구 화 경 로 를 만 들 때 호스트 경로 가 새로 만 들 어 졌 을 때 용기 경로 내용 이 비 워 집 니 다.
f. ENTRYPOINT 와 CMD 가 exec 인 자 를 사용 할 때 두 개의 따옴표 가 필요 합 니 다.
g. dockerignore 를 추가 하여 컴 파일 속 도 를 높 인 다.
.git/
node_modules/
4. 다 용도 용기 배치
Docker Compose 는 다 중 용기 애플 리 케 이 션 을 관리 하 는 도구 입 니 다.
1. docker - compose 설치
다운로드 주소 작성:https://get.daocloud.io/#inst...
$ curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
#
$ docker-compose -v
2, docker - compose 명령
기본적으로 현재 디 렉 터 리 에 docker - compose. yml 파일 이 있어 야 합 니 다.
# yml
$ docker-compose config
#
$ docker-compose ps
# / / ( yml )
$ docker-compose start | restart | stop
# ( yml )
$ docker-compose up -d # -d
# , , ,
$ docker-compose up -d --force-recreate
# : , ( )
$ docker-compose stop && docker-compose up -d
# , -f ,
$ docker-compose -f a.yml -f b.yml up -d
# Dockerfile ,
$ docker-compose up -d --build
#
$ docker-compose down
3. docker - compose 설정
프로젝트 루트 디 렉 터 리 에 docker - compose. yml 파일 을 새로 만 듭 니 다.
1.) 설정 예시
다음은 nginx + node + mongo + redis 연합 용기 의 설정 입 니 다. 프로젝트 이름 은 proj 로 가정 합 니 다.
version: '3'
services:
web:
image: nginx
container_name: proj-web
restart: always
ports:
- 1081:81
volumes:
- ./bin/nginx.conf:/etc/nginx/conf.d/web.conf
- ./web/dist:/app
command: ['nginx', '-g', 'daemon off;']
links:
- server
server:
image: keymetrics/pm2
container_name: proj-server
restart: always
ports:
- 1082:82
volumes:
- ./server:/app
working_dir: /app
environment:
- MONGO_SERVER=mongo
- MONGO_PORT=27017
- REDIS_SERVER=redis
- REDIS_PORT=6379
command: npm start
links:
- mongo
- redis
mongo:
image: mongo
container_name: proj-mongo
restart: always
ports:
- 10017:27017
volumes:
- ./mongo/configdb:/data/configdb
- ./mongo/db:/data/db
command: mongod --auth
redis:
image: redis
container_name: proj-redis
restart: always
ports:
- 10379:6379
volumes:
- ./redis/data:/data
- ./bin/redis.conf:/usr/local/etc/redis.conf
command: redis-server /usr/local/etc/redis.conf
주의해 야 할 것:
a.) command 는 exec 와 셸 두 가지 모드 를 지원 합 니 다. (위의 웹 과 server 참조)
b.)
nginx, pm2 등 프로 세 스 는 용기 가 종료 되 지 않도록 - no - daemon 인 자 를 추가 해 야 합 니 다.
c.) npm start 작업 디 렉 터 리 설정 필요
d.) links 후 용기 에서 서비스 이름 을 hostname 으로 직접 접근 할 수 있 습 니 다. 다음 과 같 습 니 다.
# nginx
proxy_pass http://server:81/;
# mongo
mongodb://mongo:27017/xxxDB
# node ,
'mongodb://www:123456@' + process.env.MONGO_SERVER + ':' + process.env.MONGO_PORT + '/xxxDB'
2.) 용기 배치
docker - compose. yml 같은 디 렉 터 리 에서 다음 명령 을 실행 하고 용 기 를 만 들 고 시작 합 니 다.
$ docker-compose up -d
기본 up 명령 은 용기 가 존재 하지 않 거나 yml 파일 설정 이 변 했 을 때 만 재 부팅 용 기 를 실행 합 니 다. node 등 웹 프로젝트 자체 가 업데이트 되 었 을 때 자동 으로 재 부팅 되 지 않 습 니 다. 솔 루 션:
$ docker-compose stop && docker-compose up -d
3. mysql 용기 설정
공식 mysql 용 기 는 상대 적 으로 스마트 하여 루트 비밀번호, 웹 데이터베이스, 사용자 / 비밀번호, 사용자 권한 및 초기 화 설정 을 자동 으로 만 들 수 있 습 니 다. 참고 > >
mysql:
image: mysql
container_name: proj-mysql
restart: always
ports:
- 10306:3306
environment:
MYSQL_ROOT_PASSWORD: ${dbRootPass}
MYSQL_USER: ${dbUser}
MYSQL_PASSWORD: ${dbPass}
MYSQL_DATABASE: ${dbName}
volumes:
- ./bin/my.cnf:/etc/my.cnf
- ./bin:/docker-entrypoint-initdb.d/
- ./mysql/db:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
compose 설정 지원 변수 바 꾸 기, 디 렉 터 리 에. env 파일 만 설정 하면 됩 니 다:
dbRootPass=root123
dbUser=www
dbPass=123456
dbName=xxxDB
항목 아래. / bin / my. cnf 설정:
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
프로젝트 아래... / bin / init. sql, 건축 표 등 을 넣 고 sql 을 초기 화 합 니 다. 다음 과 같 습 니 다.
use xxxDB;
create table xxxTable
(
id int(11) auto_increment primary key not null,
name varchar(45),
update_time datetime
);
주의해 야 할 것:
environment: 설 정 된 루트 비밀번호, 데이터베이스, 데이터베이스 권한 사용자 / 비밀 번 호 는 데이터베이스 가 처음 생 성 될 때 만 생 성 되 며 용기 의 재 구축 이나 재 부팅 에 따라 달라 지지 않 습 니 다.
volumes: 콜론 뒤의 내용 은 용기 약속 경로 입 니 다. 수정 하지 마 십시오.
command: 내 장 된 my sqld 명령 에 인 자 를 추가 하여 my sql 5.7 버 전 을 해결 한 후 caching 을 사용 합 니 다.sha2_password 인증 방식 의 호 환 문제
4.) Dockerfile 혼합 배치
제3자 기 존 미 러 를 사용 하 는 것 외 에 도 Dockerfile 을 통 해 자신의 미 러 를 설정 하고 실시 간 으로 구축 한 후 용 기 를 시작 할 수 있 습 니 다.
myapp:
container_name: proj-myapp
build: . # Dockerfile
배치 할 때 -- build 인 자 를 추가 해 야 합 니 다.
$ docker-compose up -d --build
5. 시각 화 용기 관리 도구
Portainer 는 경량급 Docker 환경 UI 인터페이스 관리 시스템 입 니 다.
1. 빠 른 배치
$ docker volume create portainer_data #
$ docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
2. 관련 설정
1.) 대화 모드
용 기 를 만 들 때 고급 설정 에서 Console 항목 은 대화 모드 를 선택 하 십시오. 그렇지 않 으 면 콘 솔 을 사용 할 수 없습니다.
2.) 입구 명령
용기 고급 설정 에서 command 의 셸 명령 은 따옴표 만 추가 해 야 합 니 다. 예 를 들 어:
Command: 'pm2' 'start' './www.js' '--no-daemon'
Working Dir: /app
3.) 볼 륨 추가
portainer 에서 volume 은 기본적으로 / var / lib / docker / volumes 에서 bid 단 추 를 누 르 면 해당 하 는 host 경 로 를 수정 / 사용자 정의 합 니 다.
4.) 응용 로그 보기
Container status 아래 logs 를 누 르 고 로그 인터페이스 에서 끄 기
자동 새로 고침 로그 자동 새로 고침 기능
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.