도커 - 기본 및 MySQL, Oracle 컨테이너 생성
도커 공개된 컨테이너 이미지
Docker Hub Container Image Library | App Containerization
Build and Ship any Application Anywhere Docker Hub is the world's easiest way to create, manage, and deliver your team's container applications. Create your account Signing up for Docker is fast and free. Continue with GoogleContinue with GitHubContinue wi
hub.docker.com
자주 쓰는 커맨드
- —name 컨테이너이름 - 컨테이너 이름 지정
- -p 호스트_포트번호:컨테이너_포트번호 - 포트번호 지정 (-p 8080:80)
- —net=네트워크_이름 - 컨테이너를 네트워크에 연결
- -e 환경변수_이름=값 - 환경변수 설정
- -d - 백그라운드로 실행함 (데몬)
- ps - 실행중인 컨테이너 보여줌
- ps -a - 존재하는 컨테이너 보여줌
- dit (-d -i -t) - 백그라운드에서 실행 및 키보드를 통해 컨테이너 내부 파일 시스템 조작
- -i - 컨테이너에 터미널(키보드) 연결
- -t - 특수 키 사용
웹 서버, 데이터베이스 서버용 컨테이너
- httpd - apache, -d로 백그라운드로 실행, -p로 포트번호 지정
- nginx - nginx, -d로 백그라운드로 실행, -p로 포트번호 지정
- mysql - MySQL, -d를 사용, 실행 시 -e MYSQL_ROOT_PASSWORD와 같이 루트 패스워드 지정
- postgres - postgreSQL, -d를 사용, 실행 시 -e POSTGRES_ROOT_PASSWORD와 같이 루트 패스워드 지정
- mariadb - MariaDB, -d를 사용, 실행 시 -e MYSQL_ROOT_PASSWORD와 같이 루트 패스워드 지정
run - 3가지를 합친 것
- docker image pull - 이미지 내려받기
- docker container create - 컨테이너 생성
- docker container start - 컨테이너 실행
아파치 컨테이너
// name - apa000ex2 , -d -> 백그라운드로 실행, -p -> 호스트 포트 8080을 컨테이너 포트 80으로 포워딩, httpd -> 아파치 이미지 이름(버전 지정 안해서 최신버전)
docker run --name apa000ex2 -d -p 8080:80 httpd
nginx 컨테이너
docker run --name nginx000ex6 -d -p 8084:80 nginx
컨테이너 포트는 중복돼도 무방하므로 모두 80번으로 설정하기
stop - 컨테이너 정지
docker container stop
rm - 컨테이너 폐기
docker rm 컨테이너 이름
// 복수 삭제
docker rm [컨테이너id], [컨테이너id]
// 모두 삭제
docker rm `docker ps -a -q`
image - 도커 이미지
// 현재 이미지 확인
docker images
// 삭제
docker image rm [이미지 이름]
docker rmi [이미지id]
// docker image rm httpd
// 컨테이너 삭제 전 이미지 삭제
docker rmi -f [이미지id]
MySQL 컨테이너 생성
Docker를 사용하여 MySQL 설치하고 접속하기 | PoiemaWeb
poiemaweb.com
docker pull mysql:8.0
docker run --name mysql000ex07 -dit -e MYSQL_ROOT_PASSWORD=패스워드 mysql
// 확인하기
docker images
// 현재 실행중인 도커 컴퓨터 상태
docker ps
// image 삭제 - IMAGE ID, 혹은 이름
docker images rm -f c138801544a9
// tag가 none인 이미지 삭제
docker rmi $(docker images -f "dangling=true" -q)
OracleDB 컨테이너 생성
1. docker 설치
Docker: Accelerated Container Application Development
2. dbever 설치
3. colima 컨텍스트로 설치
- 도커의 런타임
- arm에서도 오라클 실행가능하게함
M1 맥에서 오라클데이터 베이스 사용하는 법 (ORA-12514 해결법)
brew install colima
// colima 시작 aarch64를 인텔 x86_64로 바꿔준다, 메모리(ram) 4기가 사용
colima start --arch x86_64 --memory 4
// 여기서 architecture가 바뀌여야함
docker info
// 만약 안바뀌면 colima 사용중인지 보기, 도커에서 실행환경 colima로 바꾸기
docker context ls
docker context use colima
// oracle 설치
docker search oracle
// docker images에 다운
docker pull 원하는 오라클
// 확인하기
docker images
// docker ps -a 현재 존재하는 컨테이너 목록
// 현재 실행중인 도커 컨테이너 목록 출력
docker ps // docker container ls와 같음
// 도커 컨테이너 만들기
docker run --name 이름 -e ORACLE_PASSWORD=비밀번호 -p 1521:1521 -d 설치한 버전
// 오라클 실행
docker logs -f 컨테이너 이름
docker start 컨테이너 이름
// 현재 내가 공부중인 오라클 컨테이너
docker logs -f myoracle11
// 다시 ps 연결
docker restart myoracle11
// dbever 접속 후 데이터베이스 연결 -> 비밀번호는 설정한 oracle
// 컨테이너 중지
docker stop myoracle11
colima 삭제
colima delete
도커 네크워크 생성, 삭제
컨테이너 2개 만들고 연동하려면 가상 네트워크 생성 후 연동해야함
// 생성
docker network create 네트워크이름
// 삭제
docker network rm 네트워크이름
네트워크 커맨드
docker network 다음에 쓴다
- connect - 네트워크에 컨테이너를 새로 접속
- disconnect - 네트워크에서 컨테이너 접속 끊음
- create - 네트워크를 생성
- inspect - 네트워크의 상세 정보 확인
- ls - 목록 확인
- prune - 현재 아무 컨테이너도 접속하지 않은 네트워크 삭제
- rm - 네트워크 삭제
—net - 컨테이너를 연결할 도커 네트워크, 나머지는 모두 -e 옵션으로 환경변수 설정하기 위해 사용
네트워크 생성
docker network create wordpress000net1
mysql 생성
docker run --name mysql000ex1 -dit --net=wordpress000net1 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress000db -e MYSQL_U
SER=wordpress000kim -e MYSQL_PASSWORD=kimpass mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_n
ative_password
wordpress 생성
docker run --name wordpress00 -dit --net=wordpress000net1 -p 8085:80 -e WORDPRESS_DB_HOST=mysql000ex1 -e WORDPRESS_DB_NAME=wordpress000
db -e WORDPRESS_DB_USER=wordpress000kim -e WORDPRESS_DB_PASSWORD=kimpass wordpress
컨테이너 상태 확인
docker ps
컨테이너 종료 및 삭제
docker stop wor
dockerfile 스크립트
docker build -t 생성할_이미지_이름 재료_폴더_경로
Dockerfile 스크립트 예
FROM 이미지_이름
COPY 원본_경로 대상_경로
RUN 리눅스_명령어
컨테이너를 이미지로 변환
commit
docker commit 컨테이너_이름 새로운_이미지_이름
Dockerfile
- FROM - 토대가 되는 이미지
- ADD - 이미지에 파일이나 폴더 추가
- COPY - 이미지에 파일이나 폴더 추가
- RUN - 이미지를 빌드할 때 실행할 명령어 지정
- CMD - 컨테이너 실행할 때 실행할 명령어 지정
- ENV - 환경 변수 정의
- VOLUME - 데이터 저장할 경로 명시적으로 지정
docker exec - 컨테이너 속에서 명령어 실행하는 커맨드
폴더 만들기
mkdir 폴더
// 파일 만들고 수정
vi index.html
vi dockerfile
dockerfile 수정하기
# 1. 운영체제 및 프로그램 설치
FROM httpd
# 다운로드 받으면 터미널이 하나 생긴다 brew install은 리눅스에서 apt install과 같다
# 작업 디렉토리 설정
WORKDIR /usr/local/apache2/htdocs
# 현재 디렉토리에 모든 파일을 작업 디렉토리로 복사
COPY . .
build해서 이미지 생성
// dockerfile이 있는 디렉토리
docker build -t 이미지이름 .
docker-compose.yml(yaml)
여러 개의 명령어를 하나의 정의 파일로 합쳐 실행할 수 있다
- 컨테이너가 모인것을 서비스라 부른다
일괄 실행 run 일괄 삭제 down 삭제없이 종료 stop
- dockerfile은 네트워크나 볼륨을 만들 수 없다 컴포즈는 가능
- 도커 컴포즈는 단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너의 묶음으로 관리할 수 있는 작업 환경을 제공하는 관리 도구
도커 컴포즈를 사용하는 이유
여러 개의 컨테이너가 하나의 어플리케이션으로 동작할 때 도커 컴포즈를 사용하지 않는다면, 이를 테스트하려면 각 컨테이너를 하나씩 생성해야 합니다. 예를 들면, 웹 어플리케이션을 테스트하려면 웹 서버 컨테이너, 데이터베이스 컨테이너 두 개의 컨테이너를 각각 생성해야 합니다.
services : 이미지 컨테이너 관련내용
→ 밑에 아파치,톰캣 등 서비스(실제 동작하는 컨테이너에 대한 설정)이름
→ 관련된 설정 다시 밑에 쭉 나열되어 있음
→ depth 레벨을 맞춰야함 2,4,6 레벨별로 잘 맞춰야한다함
네트워크 : 컨테이너 엮는 네트워크 관련
볼륨 : 저장소
(둘은 같은 레벨)
yml문서규칙에 맞게 작성해야한다.
빌드 - yaml이 있는 경로에서 실행
- docker-compose build
- docker-compose up, down
// 컴포즈 파일에 있는 -f : 특정 컴포즈파일 지정
// 생성 및 실행
docker-compose -f 컴포즈파일.yml up -d
// 정지 및 삭제
docker-compose -f 컴포즈파일.yml down 옵션
docker-compose -f 컴포즈파일.yml stop 옵션
// 컴포즈 파일에 있는 서비스들 전체 빌드, -f 안쓰면 기본적으로 현재 디렉토리의 docker-compose.yml을 자동으로 사용
docker-compse up --build
종료하는 법 - ctrl + c 종료안되면 docker-compose stop
정리 - CI,CD 할 때는 도커 파일을 사용, 컴포즈는 로컬 개발 및 테스트 시 여러 개 서비를 함께 실행하고 관리시 사용