从 Docker 云部署 Docker 个容器
Deploy Docker Containers from Docker Cloud
我是 Docker 的新手,正在尝试了解有关部署 Docker 化图像的最佳实践的更多信息。我使用下面的 Docker 文件和 docker-compose.yml 在我的开发主机上构建了一些图像。
构建图像后,我通过 ssh 连接到我的生产服务器,一个亚马逊 Linux 风格的 T2.micro AWS EC2 服务实例。我在那里安装了 docker 和 docker-compose,然后尝试构建我的图像,但是 运行 内存不足。因此,我将我在本地主机上构建的图像发布到 Docker 云,现在我希望将这些图像从 Docker 云部署到 AWS 实例上。
我怎样才能做到这一点?如果其他人可以提供任何帮助,我将不胜感激!
Docker文件:
# Specify base image
FROM andreptb/oracle-java:8-alpine
# Specify author / maintainer
MAINTAINER Douglas Duhaime <douglas.duhaime@gmail.com>
# Add source to a directory and use that directory
# NB: /app is a reserved directory in tomcat container
ENV APP_PATH="/lts-app"
RUN mkdir "$APP_PATH"
ADD . "$APP_PATH"
WORKDIR "$APP_PATH"
##
# Build BlackLab
##
RUN apk add --update --no-cache \
wget \
tar \
git
# Store the path to the maven home
ENV MAVEN_HOME="/usr/lib/maven"
# Add maven and java to the path
ENV PATH="$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH"
# Install Maven
RUN MAVEN_VERSION="3.3.9" && \
cd "/tmp" && \
wget "http://archive.apache.org/dist/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz" -O - | tar xzf - && \
mv "/tmp/apache-maven-$MAVEN_VERSION" "$MAVEN_HOME" && \
ln -s "$MAVEN_HOME/bin/mvn" "/usr/bin/mvn" && \
rm -rf "/tmp/*"
# Get the BlackLab source
RUN git clone "git://github.com/INL/BlackLab.git"
# Build BlackLab with Maven
RUN cd "BlackLab" && \
mvn clean install
##
# Build Python + Node dependencies
##
# Install system deps with Alpine Linux package manager
RUN apk add --update --no-cache \
g++ \
gcc \
make \
openssl-dev \
python3-dev \
python \
py-pip \
nodejs
# Install Python dependencies
RUN pip install -r "requirements.txt" && \
npm install --no-optional && \
npm run build
# Store Mongo service name as mongo host
ENV MONGO_HOST=mongo_service
ENV TOMCAT_HOST=tomcat_service
ENV TOMCAT_WEBAPPS=/tomcat_webapps/
# Make ports available
EXPOSE 7082
# Seed the db
CMD npm run seed && \
gunicorn -b 0.0.0.0:7082 --access-logfile - --reload server.app:app
docker-compose.yml:
version: '2'
services:
tomcat_service:
image: 'bitnami/tomcat:latest'
ports:
- '8080:8080'
volumes:
- docker-data-tomcat:/bitnami/tomcat/data/
- docker-data-blacklab:/lts-app/lts/
mongo_service:
image: 'mongo'
command: mongod
ports:
- '27017:27017'
web:
# gain access to linked containers
links:
- mongo_service
- tomcat_service
# explicitly declare service dependencies
depends_on:
- mongo_service
- tomcat_service
# set environment variables
environment:
PYTHONUNBUFFERED: 'true'
# use the image from the Dockerfile in the cwd
build: .
ports:
- '7082:7082'
volumes:
- docker-data-tomcat:/tomcat_webapps
- docker-data-blacklab:/lts-app/lts/
volumes:
docker-data-tomcat:
docker-data-blacklab:
为了解决这个问题,我听从了 Whosebug 用户@MazelTov 的建议,在我的本地 OSX 开发机器上构建了容器,然后将镜像发布到 Docker 云端,然后将这些镜像拉下来运行 来自我的生产服务器 (AWS EC2) 的图像。
安装依赖项
我将在下面尝试概述我遵循的步骤,以防它们帮助其他人。请注意,这些步骤要求您在开发和生产机器上安装 docker 和 docker-compose。我使用 gui 安装程序为 Mac 安装 Docker。
构建镜像
写完 Docker 文件和 docker-compose.yml 文件后,您可以使用 docker-compose up --build
.
构建图像
将图像上传到 Docker 云端
构建图像后,您可以按照以下步骤将它们上传到 Docker 云端。首先,在 Docker Cloud.
上创建一个帐户
然后将您的 Docker 云用户名存储在环境变量中(因此您的 ~/.bash_profile
应包含 export DOCKER_ID_USER='yaledhlab'
(尽管使用您的用户名)。
接下来从您的开发者机器登录您的帐户:
docker login
登录后,列出您的 docker 图片:
docker ps
这将显示如下内容:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89478c386661 yaledhlab/let-them-speak-web "/bin/sh -c 'npm run…" About an hour ago Up About an hour 0.0.0.0:7082->7082/tcp letthemspeak_web_1
5e9c75d29051 training/webapp:latest "python app.py" 4 hours ago Up 4 hours 0.0.0.0:5000->5000/tcp heuristic_mirzakhani
890f7f1dc777 bitnami/tomcat:latest "/app-entrypoint.sh …" 4 hours ago Up About an hour 0.0.0.0:8080->8080/tcp letthemspeak_tomcat_service_1
09d74e36584d mongo "docker-entrypoint.s…" 4 hours ago Up About an hour 0.0.0.0:27017->27017/tcp letthemspeak_mongo_service_1
对于要发布到 Docker 云的每个图像,运行:
docker tag image_name $DOCKER_ID_USER/my-uploaded-image-name
docker push $DOCKER_ID_USER/my-uploaded-image-name
例如,要将 mywebapp_web
上传到您在 Docker 云上的用户帐户,您可以 运行:
docker tag mywebapp_web $DOCKER_ID_USER/web
docker push $DOCKER_ID_USER/web
然后您可以 运行 open https://cloud.docker.com/swarm/$DOCKER_ID_USER/repository/list
查看您上传的图片。
部署映像
最后,您可以按照以下步骤在 EC2 上部署您的映像。首先,在 Amazon-flavored EC2 实例上安装 Docker 和 Docker-Compose:
# install docker
sudo yum install docker -y
# start docker
sudo service docker start
# allow ec2-user to run docker
sudo usermod -a -G docker ec2-user
# get the docker-compose binaries
sudo curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# change the permissions on the source
sudo chmod +x /usr/local/bin/docker-compose
注销,然后重新登录以更新您的用户组。然后启动一个屏幕和运行服务器:screen
。屏幕启动后,您应该能够添加一个新的 docker-compose 配置文件,该文件指定已部署图像的路径。例如,我需要获取 yaledhlab
的 Docker 云帐户中的 let-them-speak-web
容器,因此我将上面的 docker-compose.yml
文件更改为下面的文件,我将其命名为production.yml
:
version: '2'
services:
tomcat_service:
image: 'bitnami/tomcat:latest'
ports:
- '8080:8080'
volumes:
- docker-data-tomcat:/bitnami/tomcat/data/
- docker-data-blacklab:/lts-app/lts/
mongo_service:
image: 'mongo'
command: mongod
ports:
- '27017:27017'
web:
image: 'yaledhlab/let-them-speak-web'
# gain access to linked containers
links:
- mongo_service
- tomcat_service
# explicitly declare service dependencies
depends_on:
- mongo_service
- tomcat_service
# set environment variables
environment:
PYTHONUNBUFFERED: 'true'
ports:
- '7082:7082'
volumes:
- docker-data-tomcat:/tomcat_webapps
- docker-data-blacklab:/lts-app/lts/
volumes:
docker-data-tomcat:
docker-data-blacklab:
然后生产组合文件可以是 运行 与:docker-compose -f production.yml up
。最后,使用另一个终端 ssh 登录,并使用 screen -D
.
分离屏幕
是的,没错。 Docker Cloud 使用 Docker Hub 作为其本地注册表,用于存储 public 和私有存储库。将图像推送到 Docker Hub 后,它们就可以在 Docker Cloud 中使用。
从 Docker 中心拉取图像与推送图像相反。这适用于私有和 public 存储库。
要在本地下载您的图像,我总是将 docker 用户名导出到 shell 会话:
# export DOCKER_ID_USER="username"
事实上,我的 .bashrc
个人资料上有这个。
将 DOCKER_ID_USER
的值替换为您的 Docker 云用户名。
然后使用 docker 登录命令登录到 Docker 云。
$ docker login
这会使用您的 Docker ID 登录,该 ID 在 Docker Hub 和 Docker Cloud
之间共享
您现在可以 运行 docker pull 命令将图像下载到本地。
$ docker pull image:tag
这适用于任何云平台,不特定于 AWS。
由于您是 docker 的新手,这里是我对 best Docker Guides 的推荐,包括 Docker 与 VM 的对比以及使用 Docker swarm 和 Kubernetes 等高级主题.
我是 Docker 的新手,正在尝试了解有关部署 Docker 化图像的最佳实践的更多信息。我使用下面的 Docker 文件和 docker-compose.yml 在我的开发主机上构建了一些图像。
构建图像后,我通过 ssh 连接到我的生产服务器,一个亚马逊 Linux 风格的 T2.micro AWS EC2 服务实例。我在那里安装了 docker 和 docker-compose,然后尝试构建我的图像,但是 运行 内存不足。因此,我将我在本地主机上构建的图像发布到 Docker 云,现在我希望将这些图像从 Docker 云部署到 AWS 实例上。
我怎样才能做到这一点?如果其他人可以提供任何帮助,我将不胜感激!
Docker文件:
# Specify base image
FROM andreptb/oracle-java:8-alpine
# Specify author / maintainer
MAINTAINER Douglas Duhaime <douglas.duhaime@gmail.com>
# Add source to a directory and use that directory
# NB: /app is a reserved directory in tomcat container
ENV APP_PATH="/lts-app"
RUN mkdir "$APP_PATH"
ADD . "$APP_PATH"
WORKDIR "$APP_PATH"
##
# Build BlackLab
##
RUN apk add --update --no-cache \
wget \
tar \
git
# Store the path to the maven home
ENV MAVEN_HOME="/usr/lib/maven"
# Add maven and java to the path
ENV PATH="$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH"
# Install Maven
RUN MAVEN_VERSION="3.3.9" && \
cd "/tmp" && \
wget "http://archive.apache.org/dist/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz" -O - | tar xzf - && \
mv "/tmp/apache-maven-$MAVEN_VERSION" "$MAVEN_HOME" && \
ln -s "$MAVEN_HOME/bin/mvn" "/usr/bin/mvn" && \
rm -rf "/tmp/*"
# Get the BlackLab source
RUN git clone "git://github.com/INL/BlackLab.git"
# Build BlackLab with Maven
RUN cd "BlackLab" && \
mvn clean install
##
# Build Python + Node dependencies
##
# Install system deps with Alpine Linux package manager
RUN apk add --update --no-cache \
g++ \
gcc \
make \
openssl-dev \
python3-dev \
python \
py-pip \
nodejs
# Install Python dependencies
RUN pip install -r "requirements.txt" && \
npm install --no-optional && \
npm run build
# Store Mongo service name as mongo host
ENV MONGO_HOST=mongo_service
ENV TOMCAT_HOST=tomcat_service
ENV TOMCAT_WEBAPPS=/tomcat_webapps/
# Make ports available
EXPOSE 7082
# Seed the db
CMD npm run seed && \
gunicorn -b 0.0.0.0:7082 --access-logfile - --reload server.app:app
docker-compose.yml:
version: '2'
services:
tomcat_service:
image: 'bitnami/tomcat:latest'
ports:
- '8080:8080'
volumes:
- docker-data-tomcat:/bitnami/tomcat/data/
- docker-data-blacklab:/lts-app/lts/
mongo_service:
image: 'mongo'
command: mongod
ports:
- '27017:27017'
web:
# gain access to linked containers
links:
- mongo_service
- tomcat_service
# explicitly declare service dependencies
depends_on:
- mongo_service
- tomcat_service
# set environment variables
environment:
PYTHONUNBUFFERED: 'true'
# use the image from the Dockerfile in the cwd
build: .
ports:
- '7082:7082'
volumes:
- docker-data-tomcat:/tomcat_webapps
- docker-data-blacklab:/lts-app/lts/
volumes:
docker-data-tomcat:
docker-data-blacklab:
为了解决这个问题,我听从了 Whosebug 用户@MazelTov 的建议,在我的本地 OSX 开发机器上构建了容器,然后将镜像发布到 Docker 云端,然后将这些镜像拉下来运行 来自我的生产服务器 (AWS EC2) 的图像。
安装依赖项
我将在下面尝试概述我遵循的步骤,以防它们帮助其他人。请注意,这些步骤要求您在开发和生产机器上安装 docker 和 docker-compose。我使用 gui 安装程序为 Mac 安装 Docker。
构建镜像
写完 Docker 文件和 docker-compose.yml 文件后,您可以使用 docker-compose up --build
.
将图像上传到 Docker 云端
构建图像后,您可以按照以下步骤将它们上传到 Docker 云端。首先,在 Docker Cloud.
上创建一个帐户然后将您的 Docker 云用户名存储在环境变量中(因此您的 ~/.bash_profile
应包含 export DOCKER_ID_USER='yaledhlab'
(尽管使用您的用户名)。
接下来从您的开发者机器登录您的帐户:
docker login
登录后,列出您的 docker 图片:
docker ps
这将显示如下内容:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89478c386661 yaledhlab/let-them-speak-web "/bin/sh -c 'npm run…" About an hour ago Up About an hour 0.0.0.0:7082->7082/tcp letthemspeak_web_1
5e9c75d29051 training/webapp:latest "python app.py" 4 hours ago Up 4 hours 0.0.0.0:5000->5000/tcp heuristic_mirzakhani
890f7f1dc777 bitnami/tomcat:latest "/app-entrypoint.sh …" 4 hours ago Up About an hour 0.0.0.0:8080->8080/tcp letthemspeak_tomcat_service_1
09d74e36584d mongo "docker-entrypoint.s…" 4 hours ago Up About an hour 0.0.0.0:27017->27017/tcp letthemspeak_mongo_service_1
对于要发布到 Docker 云的每个图像,运行:
docker tag image_name $DOCKER_ID_USER/my-uploaded-image-name
docker push $DOCKER_ID_USER/my-uploaded-image-name
例如,要将 mywebapp_web
上传到您在 Docker 云上的用户帐户,您可以 运行:
docker tag mywebapp_web $DOCKER_ID_USER/web
docker push $DOCKER_ID_USER/web
然后您可以 运行 open https://cloud.docker.com/swarm/$DOCKER_ID_USER/repository/list
查看您上传的图片。
部署映像
最后,您可以按照以下步骤在 EC2 上部署您的映像。首先,在 Amazon-flavored EC2 实例上安装 Docker 和 Docker-Compose:
# install docker
sudo yum install docker -y
# start docker
sudo service docker start
# allow ec2-user to run docker
sudo usermod -a -G docker ec2-user
# get the docker-compose binaries
sudo curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# change the permissions on the source
sudo chmod +x /usr/local/bin/docker-compose
注销,然后重新登录以更新您的用户组。然后启动一个屏幕和运行服务器:screen
。屏幕启动后,您应该能够添加一个新的 docker-compose 配置文件,该文件指定已部署图像的路径。例如,我需要获取 yaledhlab
的 Docker 云帐户中的 let-them-speak-web
容器,因此我将上面的 docker-compose.yml
文件更改为下面的文件,我将其命名为production.yml
:
version: '2'
services:
tomcat_service:
image: 'bitnami/tomcat:latest'
ports:
- '8080:8080'
volumes:
- docker-data-tomcat:/bitnami/tomcat/data/
- docker-data-blacklab:/lts-app/lts/
mongo_service:
image: 'mongo'
command: mongod
ports:
- '27017:27017'
web:
image: 'yaledhlab/let-them-speak-web'
# gain access to linked containers
links:
- mongo_service
- tomcat_service
# explicitly declare service dependencies
depends_on:
- mongo_service
- tomcat_service
# set environment variables
environment:
PYTHONUNBUFFERED: 'true'
ports:
- '7082:7082'
volumes:
- docker-data-tomcat:/tomcat_webapps
- docker-data-blacklab:/lts-app/lts/
volumes:
docker-data-tomcat:
docker-data-blacklab:
然后生产组合文件可以是 运行 与:docker-compose -f production.yml up
。最后,使用另一个终端 ssh 登录,并使用 screen -D
.
是的,没错。 Docker Cloud 使用 Docker Hub 作为其本地注册表,用于存储 public 和私有存储库。将图像推送到 Docker Hub 后,它们就可以在 Docker Cloud 中使用。
从 Docker 中心拉取图像与推送图像相反。这适用于私有和 public 存储库。
要在本地下载您的图像,我总是将 docker 用户名导出到 shell 会话:
# export DOCKER_ID_USER="username"
事实上,我的 .bashrc
个人资料上有这个。
将 DOCKER_ID_USER
的值替换为您的 Docker 云用户名。
然后使用 docker 登录命令登录到 Docker 云。
$ docker login
这会使用您的 Docker ID 登录,该 ID 在 Docker Hub 和 Docker Cloud
之间共享您现在可以 运行 docker pull 命令将图像下载到本地。
$ docker pull image:tag
这适用于任何云平台,不特定于 AWS。
由于您是 docker 的新手,这里是我对 best Docker Guides 的推荐,包括 Docker 与 VM 的对比以及使用 Docker swarm 和 Kubernetes 等高级主题.