Docker Toolbox로 제작된 Windows용 개발 환경 구축
13531 단어 Docker
개시하다
IDE와 디자이너의 PC를 이용해 개발할 때도 Docker로 쉽게 개발 환경을 만들고자 한다.
Docker+Virtualbox를 사용하여 컨테이너와 호스트 OS 간에 간단하게 공유 폴더를 만들 수 있습니다.
좋아하는 편집기로 개발할 수 있습니다.
컨디션
https://www.docker.com/products/docker-toolbox
파일 구성
적당한 곳에서 개발 환경용 목록을 준비하다.+ source
- Dockerfile
+ app
- Gemfile
- index.rb
DockerfileFROM ruby
RUN mkdir -p /srv/www/app
COPY app/Gemfile /srv/www/app
WORKDIR /srv/www/app
RUN bundle install
CMD ruby index.rb
app/Gemfilesource "http://rubygems.org"
gem 'sinatra'
gem 'sinatra-contrib'
app/index.rbrequire 'sinatra'
require 'sinatra/reloader'
set :bind, '0.0.0.0'
set :port, 3000
get '/' do
'hello'
end
Docker 이미지 만들기
Docker Toolbox 설치를 시작할 때 들어오는 Docker Qickstart Terminal 입니다.
처음 시작할 때 가상 머신 제작이 있어서 시간이 좀 걸릴 거예요.
터미널 시작이 완료되면 방금 만든 폴더로 이동하여 Docker 이미지를 만듭니다.
(C 드라이브로 이동하는 것은 소문자 c입니다.)$ cd /c/source
$ docker build -t web .
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
web latest a8b38a36ca7d About a minute ago 725.5 MB
Docker 이미지 시작
생성된 이미지를 시작합니다.
Windows의 GiitBash라면/슬래시를 앞에 두지 않으면 순조롭게 작동할 수 없습니다.$ cd /c/source/app
$ docker run -d -v /$(pwd):/srv/www/app -p 3000:3000 -t web
시작 이미지에 액세스하기
가상 시스템의 IP를 확인합니다.$ docker-machine ip default
192.168.99.100
방문http://192.168.99.100:3000/ 확인
파일 변경
source/app/index.rb의 내용이 변경되어 반영되었는지 확인해 보세요.
app/index.rbrequire 'sinatra'
require 'sinatra/reloader'
set :bind, '0.0.0.0'
set :port, 3000
get '/' do
'hello world'
end
저장하면 반영될 줄 안다.
바로 반영된다면 실제 개발에서 충분히 활용할 수 있을 것이다.
더욱 복잡한 구성
실제 개발에서 MySQL과 Nginx도 포함된 구성은 일반적이다.
docker-compose를 사용하여 컨테이너를 통일적으로 시작합니다.
이번에 제작된 구성은 위의 그림과 같다.루비 프로세스는 MySQL 및 Ngnix와 통신합니다.
파일 구성
방금 홈페이지에 제작한 간이판 구성을 그대로 담았다.
웹 페이지 아래에 app를 설정하지 않으면 Docker 이미지의 구축이 실패할 수 있습니다.+ source
- docker-compose.yml
+ web
- Dockerfile
+ app
- Gemfile
- index.rb
+ ngnix
- Dockerfile
- nginx.conf
docker-compose.ymlweb:
build: ./web
volumes:
- ./web/app:/srv/www/app
links:
- mysql
datastore:
image: busybox
volumes:
- /data/nginx
- /var/lib/mysql
nginx:
build: ./nginx
ports:
- '80:80'
volumes_from:
- datastore
links:
- web
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: 'hoge'
volumes_from:
- datastore
MySQL 데이터는 Docker 컨테이너가 끝나면 사라지기 때문에 전용 데이터 영구화용 컨테이너를 준비했습니다.
데이터만 넣으면 되니까busybox 같은 소규모 활용.
DockerfileFROM ruby
RUN apt-get update && apt-get -y install mysql-client
RUN mkdir -p /srv/www/app
COPY app/Gemfile /srv/www/app
WORKDIR /srv/www/app
RUN bundle install
CMD ruby index.rb
아까와 달리 루비는 MySQL과 연결하기 위해 mysql-client를 설치해야 합니다.
web/app/Gemfilesource "https://rubygems.org"
gem 'sinatra'
gem 'sinatra-contrib'
gem 'mysql2'
MySQL 연결용 프로그램 라이브러리를 설치합니다.
web/app/index.rbrequire 'sinatra'
require 'sinatra/reloader'
require 'mysql2'
set :bind, '0.0.0.0'
set :port, '3000'
# MySQL接続
client = Mysql2::Client.new(
:host => ENV['MYSQL_PORT_3306_TCP_ADDR'],
:username => 'root',
:password => ENV['MYSQL_ENV_MYSQL_ROOT_PASSWORD']
)
get '/' do
results = client.query("SHOW DATABASES")
tables = []
results.each do |row|
tables << row['Database']
end
"#{tables.join('<br>')}"
end
MySQL 확인 연결에 대한 처리가 추가되었습니다.
nginx/DockerfileFROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
Nginx 설정 파일을 반영하기 위해 파일을 작성한 다음 이미지를 만듭니다.
nginx/nginx.confevents {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
keepalive_timeout 65;
access_log /data/nginx/access.log main;
upstream backend {
server web:3000;
}
server {
listen 80;
server_name localhost;
location / {
if (-f $request_filename) { break; }
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://backend;
}
}
include /etc/nginx/conf.d/*.conf;
}
Sinatra 애플리케이션의 TPC를 설정합니다. 3000번 포트에서 80번 포트로 이동합니다.
docker-compose.왜냐하면 yml에 링크:웹이라는 이름이 설정되어 있어요.
host 이름에서 웹이라는 이름을 사용할 수 있습니다.
Docker Compose에서 이미지 시작
방금 제작한 환경과 다르다고 생각해 보세요. 새로운 가상 환경을 만드는 것부터 시작하세요.
docker-machine의create 옵션을 이용하여 dev라는 이름을 만드는 환경입니다.
eval 명령을 사용하면 환경 설정을 불러오고 docker 명령 등을 사용할 수 있습니다.$ cd /c/source
$ docker-machine create --driver virtualbox dev
$ eval "$(docker-machine env dev)"
$ docker-compose build
$ docker-compose up
docker-composie 명령을 사용하여 이미지를 구축하고 시작합니다.
방문해 보다
IP 를 확인한 후 브라우저를 통해 액세스합니다.$ docker-machine ip dev
192.168.99.100
방문http://192.168.99.100/ 확인
배치 Docker 환경 구성
구축은 2, 3지령만 하면 가능하지만 매번 디자이너에게 지령을 하게 하는 문턱이 높다.
Windows이기 때문에 배치 파일을 만들어 데스크톱에 올려놓고 시작하면 환경이 회복됩니다.
start.sh#!/bin/sh
docker-machine create --driver virtualbox dev
docker-machine start dev
eval "$(docker-machine env dev)"
docker-compose build
docker-compose up -d
방금 만든 Docker로 구성된 경로(docker-composie.yml 있음)에 상기 일괄 처리 파일을 배치합니다.
파일 확장자를sh로 설정하면 GiitBash와 연결된 파일이 되며, 파일을 두 번 클릭하면 시작할 수 있습니다.
위의 파일은 시작용이기 때문에 적당히 끝낼 준비를 하면 편리합니다.
끝말
Docker+Virtualbox는 자동으로 공유 폴더를 만들 수 있기 때문에 Docker 용기가 시작될 때volume를 지정하면 용기에서 호스트 OS가 좋아하는 곳의 폴더를 펼치고 파일을 편집할 수 있습니다.
간단하게 환경 구축을 하고 유쾌하게 개발했으면 좋겠습니다.
Reference
이 문제에 관하여(Docker Toolbox로 제작된 Windows용 개발 환경 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/stbmp23/items/ea23f32d04882c2c46d9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
+ source
- Dockerfile
+ app
- Gemfile
- index.rb
FROM ruby
RUN mkdir -p /srv/www/app
COPY app/Gemfile /srv/www/app
WORKDIR /srv/www/app
RUN bundle install
CMD ruby index.rb
source "http://rubygems.org"
gem 'sinatra'
gem 'sinatra-contrib'
require 'sinatra'
require 'sinatra/reloader'
set :bind, '0.0.0.0'
set :port, 3000
get '/' do
'hello'
end
Docker Toolbox 설치를 시작할 때 들어오는 Docker Qickstart Terminal 입니다.
처음 시작할 때 가상 머신 제작이 있어서 시간이 좀 걸릴 거예요.
터미널 시작이 완료되면 방금 만든 폴더로 이동하여 Docker 이미지를 만듭니다.
(C 드라이브로 이동하는 것은 소문자 c입니다.)
$ cd /c/source
$ docker build -t web .
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
web latest a8b38a36ca7d About a minute ago 725.5 MB
Docker 이미지 시작
생성된 이미지를 시작합니다.
Windows의 GiitBash라면/슬래시를 앞에 두지 않으면 순조롭게 작동할 수 없습니다.$ cd /c/source/app
$ docker run -d -v /$(pwd):/srv/www/app -p 3000:3000 -t web
시작 이미지에 액세스하기
가상 시스템의 IP를 확인합니다.$ docker-machine ip default
192.168.99.100
방문http://192.168.99.100:3000/ 확인
파일 변경
source/app/index.rb의 내용이 변경되어 반영되었는지 확인해 보세요.
app/index.rbrequire 'sinatra'
require 'sinatra/reloader'
set :bind, '0.0.0.0'
set :port, 3000
get '/' do
'hello world'
end
저장하면 반영될 줄 안다.
바로 반영된다면 실제 개발에서 충분히 활용할 수 있을 것이다.
더욱 복잡한 구성
실제 개발에서 MySQL과 Nginx도 포함된 구성은 일반적이다.
docker-compose를 사용하여 컨테이너를 통일적으로 시작합니다.
이번에 제작된 구성은 위의 그림과 같다.루비 프로세스는 MySQL 및 Ngnix와 통신합니다.
파일 구성
방금 홈페이지에 제작한 간이판 구성을 그대로 담았다.
웹 페이지 아래에 app를 설정하지 않으면 Docker 이미지의 구축이 실패할 수 있습니다.+ source
- docker-compose.yml
+ web
- Dockerfile
+ app
- Gemfile
- index.rb
+ ngnix
- Dockerfile
- nginx.conf
docker-compose.ymlweb:
build: ./web
volumes:
- ./web/app:/srv/www/app
links:
- mysql
datastore:
image: busybox
volumes:
- /data/nginx
- /var/lib/mysql
nginx:
build: ./nginx
ports:
- '80:80'
volumes_from:
- datastore
links:
- web
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: 'hoge'
volumes_from:
- datastore
MySQL 데이터는 Docker 컨테이너가 끝나면 사라지기 때문에 전용 데이터 영구화용 컨테이너를 준비했습니다.
데이터만 넣으면 되니까busybox 같은 소규모 활용.
DockerfileFROM ruby
RUN apt-get update && apt-get -y install mysql-client
RUN mkdir -p /srv/www/app
COPY app/Gemfile /srv/www/app
WORKDIR /srv/www/app
RUN bundle install
CMD ruby index.rb
아까와 달리 루비는 MySQL과 연결하기 위해 mysql-client를 설치해야 합니다.
web/app/Gemfilesource "https://rubygems.org"
gem 'sinatra'
gem 'sinatra-contrib'
gem 'mysql2'
MySQL 연결용 프로그램 라이브러리를 설치합니다.
web/app/index.rbrequire 'sinatra'
require 'sinatra/reloader'
require 'mysql2'
set :bind, '0.0.0.0'
set :port, '3000'
# MySQL接続
client = Mysql2::Client.new(
:host => ENV['MYSQL_PORT_3306_TCP_ADDR'],
:username => 'root',
:password => ENV['MYSQL_ENV_MYSQL_ROOT_PASSWORD']
)
get '/' do
results = client.query("SHOW DATABASES")
tables = []
results.each do |row|
tables << row['Database']
end
"#{tables.join('<br>')}"
end
MySQL 확인 연결에 대한 처리가 추가되었습니다.
nginx/DockerfileFROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
Nginx 설정 파일을 반영하기 위해 파일을 작성한 다음 이미지를 만듭니다.
nginx/nginx.confevents {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
keepalive_timeout 65;
access_log /data/nginx/access.log main;
upstream backend {
server web:3000;
}
server {
listen 80;
server_name localhost;
location / {
if (-f $request_filename) { break; }
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://backend;
}
}
include /etc/nginx/conf.d/*.conf;
}
Sinatra 애플리케이션의 TPC를 설정합니다. 3000번 포트에서 80번 포트로 이동합니다.
docker-compose.왜냐하면 yml에 링크:웹이라는 이름이 설정되어 있어요.
host 이름에서 웹이라는 이름을 사용할 수 있습니다.
Docker Compose에서 이미지 시작
방금 제작한 환경과 다르다고 생각해 보세요. 새로운 가상 환경을 만드는 것부터 시작하세요.
docker-machine의create 옵션을 이용하여 dev라는 이름을 만드는 환경입니다.
eval 명령을 사용하면 환경 설정을 불러오고 docker 명령 등을 사용할 수 있습니다.$ cd /c/source
$ docker-machine create --driver virtualbox dev
$ eval "$(docker-machine env dev)"
$ docker-compose build
$ docker-compose up
docker-composie 명령을 사용하여 이미지를 구축하고 시작합니다.
방문해 보다
IP 를 확인한 후 브라우저를 통해 액세스합니다.$ docker-machine ip dev
192.168.99.100
방문http://192.168.99.100/ 확인
배치 Docker 환경 구성
구축은 2, 3지령만 하면 가능하지만 매번 디자이너에게 지령을 하게 하는 문턱이 높다.
Windows이기 때문에 배치 파일을 만들어 데스크톱에 올려놓고 시작하면 환경이 회복됩니다.
start.sh#!/bin/sh
docker-machine create --driver virtualbox dev
docker-machine start dev
eval "$(docker-machine env dev)"
docker-compose build
docker-compose up -d
방금 만든 Docker로 구성된 경로(docker-composie.yml 있음)에 상기 일괄 처리 파일을 배치합니다.
파일 확장자를sh로 설정하면 GiitBash와 연결된 파일이 되며, 파일을 두 번 클릭하면 시작할 수 있습니다.
위의 파일은 시작용이기 때문에 적당히 끝낼 준비를 하면 편리합니다.
끝말
Docker+Virtualbox는 자동으로 공유 폴더를 만들 수 있기 때문에 Docker 용기가 시작될 때volume를 지정하면 용기에서 호스트 OS가 좋아하는 곳의 폴더를 펼치고 파일을 편집할 수 있습니다.
간단하게 환경 구축을 하고 유쾌하게 개발했으면 좋겠습니다.
Reference
이 문제에 관하여(Docker Toolbox로 제작된 Windows용 개발 환경 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/stbmp23/items/ea23f32d04882c2c46d9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ cd /c/source/app
$ docker run -d -v /$(pwd):/srv/www/app -p 3000:3000 -t web
$ docker-machine ip default
192.168.99.100
require 'sinatra'
require 'sinatra/reloader'
set :bind, '0.0.0.0'
set :port, 3000
get '/' do
'hello world'
end
실제 개발에서 MySQL과 Nginx도 포함된 구성은 일반적이다.
docker-compose를 사용하여 컨테이너를 통일적으로 시작합니다.
이번에 제작된 구성은 위의 그림과 같다.루비 프로세스는 MySQL 및 Ngnix와 통신합니다.
파일 구성
방금 홈페이지에 제작한 간이판 구성을 그대로 담았다.
웹 페이지 아래에 app를 설정하지 않으면 Docker 이미지의 구축이 실패할 수 있습니다.
+ source
- docker-compose.yml
+ web
- Dockerfile
+ app
- Gemfile
- index.rb
+ ngnix
- Dockerfile
- nginx.conf
docker-compose.ymlweb:
build: ./web
volumes:
- ./web/app:/srv/www/app
links:
- mysql
datastore:
image: busybox
volumes:
- /data/nginx
- /var/lib/mysql
nginx:
build: ./nginx
ports:
- '80:80'
volumes_from:
- datastore
links:
- web
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: 'hoge'
volumes_from:
- datastore
MySQL 데이터는 Docker 컨테이너가 끝나면 사라지기 때문에 전용 데이터 영구화용 컨테이너를 준비했습니다.데이터만 넣으면 되니까busybox 같은 소규모 활용.
Dockerfile
FROM ruby
RUN apt-get update && apt-get -y install mysql-client
RUN mkdir -p /srv/www/app
COPY app/Gemfile /srv/www/app
WORKDIR /srv/www/app
RUN bundle install
CMD ruby index.rb
아까와 달리 루비는 MySQL과 연결하기 위해 mysql-client를 설치해야 합니다.web/app/Gemfile
source "https://rubygems.org"
gem 'sinatra'
gem 'sinatra-contrib'
gem 'mysql2'
MySQL 연결용 프로그램 라이브러리를 설치합니다.web/app/index.rb
require 'sinatra'
require 'sinatra/reloader'
require 'mysql2'
set :bind, '0.0.0.0'
set :port, '3000'
# MySQL接続
client = Mysql2::Client.new(
:host => ENV['MYSQL_PORT_3306_TCP_ADDR'],
:username => 'root',
:password => ENV['MYSQL_ENV_MYSQL_ROOT_PASSWORD']
)
get '/' do
results = client.query("SHOW DATABASES")
tables = []
results.each do |row|
tables << row['Database']
end
"#{tables.join('<br>')}"
end
MySQL 확인 연결에 대한 처리가 추가되었습니다.nginx/Dockerfile
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
Nginx 설정 파일을 반영하기 위해 파일을 작성한 다음 이미지를 만듭니다.nginx/nginx.conf
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
keepalive_timeout 65;
access_log /data/nginx/access.log main;
upstream backend {
server web:3000;
}
server {
listen 80;
server_name localhost;
location / {
if (-f $request_filename) { break; }
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://backend;
}
}
include /etc/nginx/conf.d/*.conf;
}
Sinatra 애플리케이션의 TPC를 설정합니다. 3000번 포트에서 80번 포트로 이동합니다.docker-compose.왜냐하면 yml에 링크:웹이라는 이름이 설정되어 있어요.
host 이름에서 웹이라는 이름을 사용할 수 있습니다.
Docker Compose에서 이미지 시작
방금 제작한 환경과 다르다고 생각해 보세요. 새로운 가상 환경을 만드는 것부터 시작하세요.
docker-machine의create 옵션을 이용하여 dev라는 이름을 만드는 환경입니다.
eval 명령을 사용하면 환경 설정을 불러오고 docker 명령 등을 사용할 수 있습니다.
$ cd /c/source
$ docker-machine create --driver virtualbox dev
$ eval "$(docker-machine env dev)"
$ docker-compose build
$ docker-compose up
docker-composie 명령을 사용하여 이미지를 구축하고 시작합니다.방문해 보다
IP 를 확인한 후 브라우저를 통해 액세스합니다.
$ docker-machine ip dev
192.168.99.100
방문http://192.168.99.100/ 확인배치 Docker 환경 구성
구축은 2, 3지령만 하면 가능하지만 매번 디자이너에게 지령을 하게 하는 문턱이 높다.
Windows이기 때문에 배치 파일을 만들어 데스크톱에 올려놓고 시작하면 환경이 회복됩니다.
start.sh#!/bin/sh
docker-machine create --driver virtualbox dev
docker-machine start dev
eval "$(docker-machine env dev)"
docker-compose build
docker-compose up -d
방금 만든 Docker로 구성된 경로(docker-composie.yml 있음)에 상기 일괄 처리 파일을 배치합니다.
파일 확장자를sh로 설정하면 GiitBash와 연결된 파일이 되며, 파일을 두 번 클릭하면 시작할 수 있습니다.
위의 파일은 시작용이기 때문에 적당히 끝낼 준비를 하면 편리합니다.
끝말
Docker+Virtualbox는 자동으로 공유 폴더를 만들 수 있기 때문에 Docker 용기가 시작될 때volume를 지정하면 용기에서 호스트 OS가 좋아하는 곳의 폴더를 펼치고 파일을 편집할 수 있습니다.
간단하게 환경 구축을 하고 유쾌하게 개발했으면 좋겠습니다.
Reference
이 문제에 관하여(Docker Toolbox로 제작된 Windows용 개발 환경 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/stbmp23/items/ea23f32d04882c2c46d9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#!/bin/sh
docker-machine create --driver virtualbox dev
docker-machine start dev
eval "$(docker-machine env dev)"
docker-compose build
docker-compose up -d
Docker+Virtualbox는 자동으로 공유 폴더를 만들 수 있기 때문에 Docker 용기가 시작될 때volume를 지정하면 용기에서 호스트 OS가 좋아하는 곳의 폴더를 펼치고 파일을 편집할 수 있습니다.
간단하게 환경 구축을 하고 유쾌하게 개발했으면 좋겠습니다.
Reference
이 문제에 관하여(Docker Toolbox로 제작된 Windows용 개발 환경 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/stbmp23/items/ea23f32d04882c2c46d9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)