lovebetDocker容器。Dcoker入门教程:使用Docker部署Node.js应用。

平等:什么是容器

若果容器理解也独立运行的一个或者同一组用,以及它们的周转状态环境。
而虚拟机则为可掌握也走在点的采取。

Dcoker入门教程:使用Docker部署Node.js应用

次:创建容器

创造文件称吧Dockerfile的空目录,将以下三独文本复制到个中。

Docker简介

lovebet 1
  Docker是一个开源的使容器引擎,可以呢咱提供安全、可移栽、可另行的自动化部署之不二法门。Docker采用虚拟化的艺来虚拟化出应用程序的运行条件。如达到图一律。Docker就像相同条轮船。而轮船上面的每个微箱子可以当作我们要安排的一个个运用。使用Docker可以充分利用服务器的系统资源,简化了自动化部署和运维的繁琐流程,减少过多为支付环境遭受及生产条件受到之异引发的充分问题。从而增强生产力。
  Docker三独着力概念如下:

  • 镜像(images):一个特读的模版,可以知道为应用程序的周转条件,包含了程序运行所指的条件和中心配备。相当给上图被的每个微箱子内装的东西。
  • 仓库(repository):一个用来存放镜像文件的库房。可以看做和gitlab一样。
  • 容器(container):一个运作应用程序的虚构容器,他跟镜像最老的别在于容器的顶上面那无异重合是只是读而写的。
    相当给上图备受的每个微箱子里。

 1.添加文件

    Dockerfile文件

# Use an official Python runtime as a parent image
FROM python:2.7-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python", "app.py"]

# Set proxy server, replace host:port with values for your servers
ENV http_proxy host:port
ENV https_proxy host:port

 requirements.txt

Flask
Redis

app.py

from flask import Flask
from redis import Redis, RedisError
import os
import socket

# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)

app = Flask(__name__)

@app.route("/")
def hello():
    try:
        visits = redis.incr("counter")
    except RedisError:
        visits = "<i>cannot connect to Redis, counter disabled</i>"

    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
    return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

Docker安装

2.创镜像

翻开文件

#ls
Dockerfile        app.py            requirements.txt

 

每当“Dockerfile”文件夹下运作下面发号施令,创建了一个因为“friendlyhello”命名的Docker镜像。

#docker build -t friendlyhello .

 

Mac

  官网下载地址,点击下载即可。

3.查看新建镜像

新建的镜像在Docker 镜像registry中

#docker images

REPOSITORY            TAG                 IMAGE ID
friendlyhello         latest              326387cea398

 

Liunx

开拓终端 输入

curl https://releases.rancher.com/install-docker/17.12.sh | sh

等待安装到位。检查是不是安装成功。
lovebet 2
环境都设置收尾。现在来开部署下吧。

4.运转应用程序

运行该APP(应用程序),并将4000照射到80端口

#docker run -p 4000:80 friendlyhello

 

 并以浏览器被输入http://localhost:4000,注意如果是win7则将localhost修改为IP

 

Docker实战

 5.后大运行应用程序

#docker run -d -p 4000:80 friendlyhello

 

预备干活

6.查看容器

# docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED
1fa4ab2cf395        friendlyhello       "python app.py"     28 seconds ago

 

初始化一个Node.Js程序

以下操作必须就装了NodeJS。如果没安装请参见之前的课  如何以CentOS
7安装Node.js
首先创建一个空文件夹。并创以下文件:

  • server.js
  • package.json
  • Dockerfile
  • .dockerignore

mkdir docker_demo
cd docker_demo
touch server.js
touch package.json
touch Dockerfile
touch .dockerignore

然后在server.js写入

const Koa = require(‘koa’);
const app = new Koa();

app.use(async ctx => {
  ctx.body = ‘Hello docker’;
});

app.listen(3000);

在package.json中写入

{
 “name”: “docker_demo”,
 “version”: “0.1.0”,
 “private”: true,
 “scripts”: {
  “start”: “node server.js”
 },
 “dependencies”: {
  “koa”: “^2.5.0”
}
}

测试程序。控制高输入

npm start

浏览器打开当地测试,如果如图所示。表示demo创建成功。请继续向下。
lovebet 3

 7.停止容器

#docker container stop 1fa4ab2cf395

 

创建dockerfile文件

  Dockerfile是由于同样层层令和参数构成的本子,一个Dockerfile里面富含了构建整个image的完整命令。Docker通过docker
build执行Dockerfile中的同等名目繁多令自动构建image.
每当.dockerignore文件中写副代码。表示过滤该类型的文本。类似git的.gitignore

# Logs
logs
*.log
npm-debug.log*

# Runtime data
pids
*.pid
*.seed

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage

# nyc test coverage
.nyc_output

# Grunt intermediate storage
(http://gruntjs.com/creating-plugins\#storing-task-files)
.grunt

# node-waf configuration
.lock-wscript

# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules
jspm_packages

# Optional npm cache directory
.npm

# Optional REPL history
.node_repl_history
.idea
.node_modules
node_modules
.vscode

  于Dockerfile文件被描写副以下代码:

#制订node镜像的本子
FROM node:8.9-alpine
#声称作者
MAINTAINER robin
#运动当前目录下面的公文及app目录下
ADD . /app/
#登到app目录下面,类似cd
WORKDIR /app
#安依赖
RUN npm install
#对外暴露的端口
EXPOSE 3000
#先后启动脚本
CMD [“npm”, “start”]

 三:分享镜像

构建镜像

以build命令构造镜像,注意后面那个.不克少。

docker build -t docker_demo .robin:docker_demo robin$ docker build -t
docker_demo .
Sending build context to Docker daemon  39.94kB
Step 1/7 : FROM node:8.9-alpine
—> 406f227b21f5
Step 2/7 : MAINTAINER robin
—> Using cache
—> 78d6cdbcfee2
Step 3/7 : ADD . /app/
—> 2cb30678612d
Step 4/7 : WORKDIR /app
Removing intermediate container e51377081039
—> c2b7d0f37d2d
Step 5/7 : RUN npm install
—> Running in da0c3946ca8d
npm notice created a lockfile as package-lock.json. You should commit
this file.
added 38 packages in 3.323s
Removing intermediate container da0c3946ca8d
—> eecee87f10e2
Step 6/7 : EXPOSE 3000
—> Running in f3973cc168a4
Removing intermediate container f3973cc168a4
—> 2671a4c6deb4
Step 7/7 : CMD [“npm”, “start”]
—> Running in dec529f754aa
Removing intermediate container dec529f754aa
—> 6ec73793d353
Successfully built 6ec73793d353
Successfully tagged docker_demo:latest

等待镜像构造就。然后利用 images命令查看镜像。
lovebet 4
这时候足见到images已经组织就。现在起来启动images,并测试。

#起先镜像 -d表示后台执行,-p
9000:3000意味着指定地方的9000端口隐射到容器内之3000端口,docker_demo为镜像名称
docker run -d -p 9000:3000 docker_demo
#查容器
docker ps

lovebet 5
此刻浏览器打开http://localhost:9000/,如果如图所示。表示容器运行正常。
lovebet 6
  如果这时本地无法打开。可以使用log命令查看日志。根据日志修改对诺出现的对方。

1.登录Docker

 
登录到本地电脑上集体的Docker注册表。如果无账号,可以登录到https://cloud.docker.com/中注册

#docker login

 

绑定docke hub

  镜lovebet像曾经在了咱们本机硬盘,那我们实际上中还是上传到服务器也?这里通常发生2只方式。一直是好搭建镜像仓库仍(harbor),还有就是是官方的docke
hub,类似gitlab。我们这里先为docke
hub为列。harbor放在下篇博客。首先用登记docke
hub账号,官网注册地点。然后登陆。

robin:docker_demo robin$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If
you don’t have a Docker ID, head over to https://hub.docker.com to
create one.
Username:xxxxxx
Password:
Login Succeeded
robin:docker_demo robin$

登陆成功后。需要让当下images。添加tag,并push

#格式docker tag 标签名 用户名/标签名
docker tag docker_demo robin365/docker_demo
#格式docker push 用户名/标签名
docker push robin365/docker_demo

  完成后,可以登陆docke
hub查看刚刚push的镜像。我们得以设置是镜像是否公开。Public:所有人数犹足以下载。Private:表示自己才能够下载。lovebet 7
  这样我们早就把images上传出docke
hub了,在咱们需要为此到此images的时段可一直通过docker
pull命令下载使用了。
  到这以课程结束。实际项目中安排可能会见油然而生各式各样的题材,我们需要多查log。根据log去做相应修改。后面我吧会见整理出有关docke在布置nodejs应用被的局部比较容易失误的地方。

2.标记镜像

形如docker tag image username/repository:tag,意思是用户john将镜像“ friendlyhello”上传至“get-started”存储库,标记为“part2”。

#docker tag friendlyhello john/get-started:part2

 

Dockerc 常用命令

 #翻看时docker版本
docker -v
#查阅时地面所有镜像
docker images
#组织镜像,用法docker build -t 镜像名称 .
docker build -t docker_demo .
#用于容器与主机里的多少拷贝。用法docker cp 主机文件地点
容器内地址。12d7f14v45cv为容器id。
docker cp /www/runoob 12d7f14v45cv:/www/
#开创一个初的容器并运行,-d为后台执行,-p
9000:3000面前为主机端口,后面是容器端口。docker_demo镜像名
docker run -d -p 9000:3000 docker_demo
#起先已经让终止的器皿
docker start docker_demo
#关已经于启动之容器
docker stop docker_demo
#还起动容器
docker restart docker_demo
#杀掉一个运行面临之容器。
docker kill -s KILL docker_demo
#抹一个要么小容器。-f :通过SIGKILL信号强制删除一个运行中之器皿-l
:移除容器内的网络连接,而非容器本身-v :-v 删除与容器关联的窝
docker rm -f docker_demo、docker_demo1
#每当运作的器皿被执行命令。104e28f2f072容器id
sudo docker exec -it 104e28f2f072 /bin/bash
#排有容器。 -a:所有容器包含无运行的
docker ps
#得容器获取容器的日志 104e28f2f072容器id,-t:显示时间戳
docker logs -f -t 104e28f2f072
#登陆镜像仓库
docker login
#抱镜像
docker pull
#达成传镜像
docker push
#翻看指定镜像的创立历史。
docker history docker_demo

正文永久更新链接地址:https://www.bkjia.com/Linux/2018-03/151318.htm

http://www.bkjia.com/Linux/1314588.htmlwww.bkjia.comtruehttp://www.bkjia.com/Linux/1314588.htmlTechArticleDcoker入门教程:使用Docker部署Node.js应用
Docker简介
Docker是一个开源的施用容器引擎,可以吗咱提供安全、可移栽、可更的自动化部署之…

3. 翻看镜像

# docker images

 

4.发布镜像

形如“docker push username/repository:tag”,镜像一旦上传将会受公开

#docker push john/get-started:part2

 

5.取出镜像

输入形如“docker run -p 4000:80  username/repository:tag”如下命令

#docker run -p 4000:80 john/get-started:part2

返回如下:

Unable to find image ‘john/get-started:part2’ locally
part2: Pulling from john/get-started
10a267c67f42: Already exists
f68a39a6a5e4: Already exists
9beaffc0cf19: Already exists
3c1fe835fb6b: Already exists
4c9f1fa8fcb8: Already exists
ee7d8f576a14: Already exists
fbccdcced46e: Already exists
Digest:
sha256:0601c866aab2adcc6498200efd0f754037e909e5fd42069adeff72d1e2439068
Status: Downloaded newer image for john/get-started:part2
* Running on http://0.0.0.0:80/ (Press CTRL+C to quit)

 

四:附录:

使想知道还多容器相关命令可尝试着运行下列命令

docker build -t friendlyname .              # Create image using this directory's Dockerfile
docker run -p 4000:80 friendlyname          # Run "friendlyname" mapping port 4000 to 80
docker run -d -p 4000:80 friendlyname       # Same thing, but in detached mode
docker container ls                         # List all running containers
docker container ls -a                      # List all containers, even those not running
docker container stop <hash>                # Gracefully stop the specified container
docker container kill <hash>                # Force shutdown of the specified container
docker container rm <hash>                  # Remove specified container from this machine
docker container rm $(docker container ls -a -q)         # Remove all containers
docker image ls -a                          # List all images on this machine
docker image rm <image id>                  # Remove specified image from this machine
docker image rm $(docker image ls -a -q)    # Remove all images from this machine
docker login             # Log in this CLI session using your Docker credentials
docker tag <image> username/repository:tag  # Tag <image> for upload to registry
docker push username/repository:tag         # Upload tagged image to registry
docker run username/repository:tag          # Run image from a registry

 

相关文章