一、安装docker社区版(centos7必需!)
- docker的卸载(第一次安装请略过)
- 注:不论是新版或者是老板,/var/lib/docker下的镜像文件等等是不会被删除的
- 老版docker卸载
$ yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
- 新版docker卸载
$ yum --assumeyes erase docker-ce
- docker社区版的安装
- 注:安装方法有多种,在线、离线、脚本安装等等,在此只介绍在线安装方法
- 先下载docker仓库,稍后可以从此仓库下载docker
$ yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 $ yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
- 下载docker社区版
$ yum --assumeyes install docker-ce docker-ce-cli containerd.io
- 启动docker并设为开机自动启动
$ systemctl --now enable docker.service #如果不想设为开机自动启动,使用下面这个命令 $ systemctl start docker.service
- 以hello world来检验安装是否成功
如果显示如上结果,则说明docker安装成功!$ docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
二、为你的应用创造一个镜像
- 下载官方的测试应用(如果你有自己的项目的话,请跳过)
$ git clone -b v1 https://github.com/docker-training/node-bulletin-board
- 为你的镜像编写Dockerfile(Dockerfile定义了一个容器如何整合你要的资源,也定义了一些命令告诉docker如何运行这个容器)
FROM node:6.11.5
WORKDIR /usr/src/app
COPY package.json .
RUN npm install
COPY . .
CMD [ "npm", "start" ]
- FROM表示该镜像基于哪个镜像
- WORKDIR指明随后的一些列操作发生在你镜像的文件系统上的位置
- COPY表示复制哪些文件到你镜像的文件系统上,(.)表示WORkDIR下对应的文件
- RUN表示运行什么命令
- CMD表示提供一个默认的动作,可以使得这个项目被发布出去,或者真正可用,比如本例的npm start,多个CMD只有最后一个CMD会生效
- 为你的项目创建一个docker镜像
$ cd node-bulletin-board/bulletin-board-app
$ docker image build -t bulletinboard:1.0 .
ps:当看到Successfully tagged bulletinboard:1.0
时说明创建镜像已经成功了。windows用户可能会收到一个安全警告,这没有问题。
三、基于你的本地镜像开启一个对应容器、并进行测试、删除
- 根据镜像开启一个容器
$ docker container run --publish 8000:8080 --detach --name bb bulletinboard:1.0
注:--publish 8000:8080
表示将主机在8000端口接收到的信息转发到容器的8080端口,--detach
表示该容器将在后台运行,而不是独占一个控制台,--name bb
表示将该容器命名为bb,后续可以使用该名称来对这个容器进行操作。
- 浏览器访问host:8000进行测试
- 删除这个容器
$ docker container rm --force bb
四、上传你的镜像到Docker Hub
- 注册Docker Hub
- 登录后,点击右上角Repositories,然后点击create,输入你的仓库名字,一切就绪后,点击create就完成了一个仓库的创建 创建仓库的过程
- 在本地使用
docker login
登录docker,用户名和密码就是你注册Docker Hub的那个 - 给你的镜像打一个标签,标签格式为
<Docker Hub ID>/<Repository Name>:<tag>
$ docker image tag bulletinboard:1.0 userName/bulletin:1.0
- 推送你的镜像到Docker Hub
$ docker image push userName/bulletin:1.0
- 在Docker Hub上查看镜像是否上传成功
五、在另一台机器上拉取你在Docker Hub上的镜像到本地,并且部署到Docker Swarm(你也可以选择k8s)上
- 拉取你在Docker Hub上镜像
$ docker image pull userName/bulletin:1.0
- 初始化主机为Docker Swarm的一个节点
$ docker swarm init
- 为你swarm应用编写stack文件(yaml后缀)
version: '3.7'
services:
bb-app:
image: userName/bulletin:1.0
ports:
- "8000:8080"
- 使用你的stack文件来在swarm上部署你的应用
$ docker stack deploy -c bulletin-stack.yaml demo
- 检查应用是否部署完成
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
7713b3wpzqlo demo_bb-app replicated 1/1 userName/bulletin:1.0 *:8000->8080/tcp
- 浏览器测试
- 关闭你的应用
$ docker stack rm demo
网友评论