Docker ①(환경 구축 시작 +WordPress)
개시하다
이번에는 Docker를 EC2에 설치하여WordPress를 가동해 봅시다.
Dock ker를 알고 있다고 생각하지만 만져보지 않은 사람을 향한 손잡이입니다.
Docker 소개
Docker는 인프라 관계와 DevOps 분야에서 주목받는 기술 중 하나로 Docker사가 개발한 컨테이너형 가상 환경을 제작, 분배, 운행하는 플랫폼이다.
물리적 기반, 가상화, 컨테이너 차이
물리적 기초
가상화
컨테이너
하나의 물리적 토대 위에서 하나의 OS는 호스트 OS를 실행하면 전체 시스템의 관리 하드웨어 성격을 누릴 수 있는 사무처리 적용성이 높고 정지 없이 시스템에서 사용할 수 있다
가상 하드웨어에 대한 오버헤드 관리 필요 가상 디스크 부팅기에 대한 고객 OS 시작/중지 필요
소프트웨어 개발의 작업 시간은 소프트웨어 개발의 작업 시간을 줄이고 운행 시간의 봉인화 비용을 거의 0 호스트 OS에서 볼 수 있는 매우 가벼운 응용 환경을 실현했다.
Docker의 장점
수법의 구성
다음은 이번에 수작업으로 제작한 환경.
손수
환경 구조
먼저 원격 서버에 Docker를 시작하는 환경을 구축해야 합니다.
AWS의 EC2에서 환경을 구축하기 위해 AWS의 서비스는 클라우드 포메이션을 사용합니다.
CloudFormation에 관해서는 아래에 글을 쓸 테니 여기를 참고하세요.
먼저 다음 템플릿으로 VPC, Subnet, 인터넷 Gateway를 만듭니다.
다른 스택에서 이러한 정보를 활용하려면 Outputs 섹션에서 VPC, Subnet 정보를
출력
network.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
# ------------------------------------------------------------#
# VPC
# ------------------------------------------------------------#
MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
InstanceTenancy: default
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: MyVPC
# ------------------------------------------------------------#
# Internet Gateway
# ------------------------------------------------------------#
InternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: My-InternetGateway
AttachGateway:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref MyVPC
InternetGatewayId: !Ref InternetGateway
# ------------------------------------------------------------#
# Route Table
# ------------------------------------------------------------#
RouteTable:
Type: AWS::EC2::RouteTable
DependsOn: AttachGateway
Properties:
VpcId: !Ref MyVPC
Tags:
- Key: Name
Value: My-RouteTable
Route:
Type: AWS::EC2::Route
DependsOn: AttachGateway
Properties:
RouteTableId: !Ref RouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref InternetGateway
# ------------------------------------------------------------#
# Public Sunbet A
# ------------------------------------------------------------#
PublicSubnetA:
Type: AWS::EC2::Subnet
DependsOn: AttachGateway
Properties:
AvailabilityZone: "ap-northeast-1a"
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: 'true'
VpcId: !Ref MyVPC
Tags:
- Key: Name
Value: PublicSubnetA
PublicRouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PublicSubnetA
RouteTableId: !Ref RouteTable
Outputs:
VPC1:
Value: !Ref MyVPC
Export:
Name: VPCName
SubnetA:
Value: !Ref PublicSubnetA
Export:
Name: SubnetName
그런 다음 EC2 인스턴스와 연관된 보안 그룹을 생성합니다.HTTP(8080포트), SSH(22포트)가 인터넷에서 Security Group Ingress를 통해 입국 규칙을 지정할 수 있도록 하기 위해서다.
security.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
MySecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !ImportValue VPCName
GroupDescription: Allow SSH from Internet
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 8081
ToPort: 8080
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: WebServerSG
Outputs:
MySecurityGroup:
Value: !Ref MySecurityGroup
Export:
Name: SecurityGroupName
마지막으로 다음 템플릿으로 EC2 인스턴스를 시작합니다.ec2.yml
AWSTemplateFormatVersion: 2010-09-09
Parameters:
KeyName:
Description: The EC2 Key Pair
Type: "AWS::EC2::KeyPair::KeyName"
EC2AMIId:
Description: AMI ID
Type : String
Default: ami-01748a72bed07727c
Resources:
WebServer:
Type: AWS::EC2::Instance
Properties:
KeyName: !Ref KeyName
ImageId: !Ref EC2AMIId
InstanceType: t2.micro
SubnetId: !ImportValue SubnetName
SecurityGroupIds:
- !ImportValue SecurityGroupName
Tags:
- Key: Name
Value: WebServer
위의 세 템플릿에서 CloudFormation 스택을 작성한 후 이전에 기록된 구조를 작성할 수 있습니다.템플릿에 대한 자세한 설명을 생략할 수 있도록 허락해 주십시오.
EC2에 Docker 설치
환경 구축이 완료되면 제작된 EC2에 Docker를 설치합니다.
(이번에는 사용하지 않았지만 docker-compose도 설치되어 있습니다.)
다음 명령을 사용하여 통일적으로 설치할 것이다.
sudo yum update -y && \
sudo amazon-linux-extras install -y docker && \
sudo usermod -a -G docker ec2-user && \
sudo systemctl start docker.service && \
sudo systemctl status docker.service && \
sudo systemctl enable docker.service && \
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose && \
sudo chmod +x /usr/local/bin/docker-compose && \
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
여기, & & & AND 연산자연결 명령을 통해 명령이 성공한 후에 다음 명령을 실행하는 동작을 실현할 수 있다.\줄 바꿈을 나타냅니다.
sudo yum update -y
sudo amazon-linux-extras install -y docker
Amazon Linux에는 아마존-Linux-extras라는 독립 포장 관리 소프트웨어가 있는데 자주 사용된다.sudo usermod -a -G docker ec2-user
/etc/group
후 추가docker:x:992:ec2-user
를 알 수 있습니다.또한,ec2-user를 통해 조합 확인 후
$ groups
ec2-user adm wheel systemd-journal docker
에서 보듯이, 우리는 네가 docker그룹에 속한다는 것을 안다.usemod를 실행하지 않습니다.ec2-user에서 docker 명령을 사용할 때 다음과 같은 오류가 발생할 수 있습니다.(docker 서비스가 시작됨)
$ docker images
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json": dial unix /var/run/docker.sock: connect: permission denied
sudo systemctl start docker.service
sudo systemctl status docker.service
sudo systemctl enable docker.service
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose && \
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
아래 참조위의 명령을 EC2의 사용자 데이터로 설명하면 EC2 인스턴스를 시작하면서 docker를 설치할 수도 있습니다.
ec2.yml(수정 후)
AWSTemplateFormatVersion: 2010-09-09
Parameters:
KeyName:
Description: The EC2 Key Pair
Type: "AWS::EC2::KeyPair::KeyName"
EC2AMIId:
Description: AMI ID
Type : String
Default: ami-01748a72bed07727c
Resources:
WebServer:
Type: AWS::EC2::Instance
Properties:
KeyName: !Ref KeyName
ImageId: !Ref EC2AMIId
InstanceType: t2.micro
SubnetId: !ImportValue SubnetName
SecurityGroupIds:
- !ImportValue SecurityGroupName
Tags:
- Key: Name
Value: WebServer
UserData:
Fn::Base64: |
#!/bin/bash
sudo yum update -y && \
sudo amazon-linux-extras install -y docker && \
sudo usermod -a -G docker ec2-user && \
sudo systemctl start docker.service && \
sudo systemctl status docker.service && \
sudo systemctl enable docker.service && \
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose && \
sudo chmod +x /usr/local/bin/docker-compose && \
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
이 템플릿을 사용하면 docker의 리눅스 환경을 언제든지 사용할 수 있습니다.WordPress 시작
상기 Docker 명령을 이용할 수 있기 때문에 Docker 명령을 시도하기 시작합니다.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
특히pull이 docker 이미지도 아니고 시작한 것도 아니기 때문에 아무것도 보이지 않습니다.docker run --name mysql_db -e MYSQL_ROOT_PASSWORD=passwd -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=passwd -d mysql:5.7.21
docker run 명령을 사용하여 시작 상태에서 mysql 용기를 만듭니다.-- name 옵션에서 컨테이너 이름을 mysql로 설정합니다.db에서 -e 옵션을 통해 MySQL의 환경 정보를 설정합니다.
MySQL 버전을 5.7로 변경해야 합니다.
docker run --name wp_site --link mysql_db:mysql -p 8080:80 -e WORDPRESS_DB_HOST=mysql_db:3306 -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=passwd -d wordpress
MySQL 용기와 같이 docker run 명령을 사용하여 시작 상태에서WordPress 용기를 만듭니다. -EC2의 8080 포트를 컨테이너의 80 포트에 p 옵션으로 바인딩링크 옵션을 사용하여 WordPress 컨테이너를 MySQL 컨테이너에 연결합니다.-- 링크 옵션은 기존 기능으로 권장하지 않는다.
https://docs.docker.jp/v17.06/engine/userguide/networking/default_network/dockerlinks.html
원래 사용자 정의 네트워크를 사용하는 것을 추천했다고 한다.
브라우저에서 http:/{EC2 인스턴스의 공용 IP]에 액세스: 8080.
일본어를 선택하고
WordPress 웹 사이트의 설정을 수행합니다.
WordPress 설치가 완료되었습니다.
상기 설정에 근거하여 로그인
WordPress의 관리 화면을 표시합니다.
매우 간단하게 WordPress 사이트를 구축했습니다!
총결산
WordPress의 Docker 이미지를 사용하면 WordPress 사이트를 간단하게 구축할 수 있습니다.
Word Press뿐만 아니라 다양한 Docker 이미지가 존재하기 때문에 시도해 보면 흥미롭다.
이번에는 기존의 Docker 이미지를 활용해서 다음에 제가 직접 Docker 이미지를 만들어서 시작할 때까지 하고 싶어요.
Reference
이 문제에 관하여(Docker ①(환경 구축 시작 +WordPress)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/soshimiyamoto/articles/d7bc611979d2f7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)