文章目录
基础操作
升级内核
安装完成后把最新版本内核设为默认内核
安装docker
配置源
安装最新版本
docker基本操作
检查docker版本
运行镜像
运行hello world示例。这里我们本地没有hello world的docker,于是docker被拉取下来并部署
运行ubuntu docker
显示本地镜像库内容
获得帮助
显示容器
上面是显示运行中的容器,加上-a参数后将显示所有容器,包括已终止的。
继续运行元容器并进入
拉取MySQL镜像
构建docker镜像练习
创建一个新文件夹,创建一个dockerfile,并写入以下内容
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
构建镜像
运行镜像
MySQL与容器化
启动MySQL服务器:
运行MySQL客户端
进行数据库操作
创建卷并挂载
自动编排容器
下载docker-compose
$ sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
编写stack.yml编排文件
运行docker-compose -f stack.yml up
开始自动部署
部署成功
新部署的容器
docker网络
查看网络
备制支持ifconfig和ping命令的ubuntu容器
由容器制作镜像
创建网络
连通性检测
两个容器可以互相ping通
u1 ping u2
u2 ping u1
断开网络后,二者就不能再连通了
实战
在我们的项目中,运行的代码被分配到三个docker中:静态文件服务器,后端服务器,数据库服务器。
- 静态文件服务器:负责前端网页部分的传输
- 后端服务器:处理查询请求
- 数据库服务器:保存后端数据
创建静态文件服务器docker
dockerfile文件
FROM node:8
# Create app directory
RUN mkdir -p /home/swapi
WORKDIR /home/swapi
# Bundle app source
COPY . /home/swapi
RUN npm install
EXPOSE 8888
# CMD [ "npm", "start" ]
CMD ["node", "bin/index.js", "8888", "http://192.168.134.129:8080"]
这个容器是一个继承自node:8的容器,然后在容器内创建一个/home/swapi
的文件夹,并把工作区转移到这里。接下来,我们使用COPY
命令把前端文件从本机拷贝到docker内。
这些安装工作完成后,EXPOSE 8888
命令把容器的8888对外暴露出来,提供访问服务。最后一句CMD
语句的作用是在docker内运行一个node服务器,提供静态文件服务器。
创建后端服务器docker
# Use an official Golang runtime as a parent image
FROM golang:latest
# Make the working directory
RUN mkdir -p go/src/server
# Set the working directory to /go/src/server
WORKDIR /go/src/server
# Copy the current directory contents into the container at /go/src/server
COPY . /go/src/server
# Get all packets and install
RUN go get -u -v
RUN go install -v
# Make port 8080 available to the world outside this container
EXPOSE 8080
CMD server run
后端的部署与静态文件部署类似,但有一点不同的是,静态文件服务器继承的是node容器,后端容器继承的是golang的容器。布置的过程类似,同样是按照新建文件夹,复制文件,构建文件,暴露端口,运行服务器的顺序进行。
部署过程:
创建数据库docker
FROM mysql:5.7.21
#设置登录密码
ENV MYSQL_ROOT_PASSWORD 123456
#定义工作目录
ENV WORK_PATH /opt/starWar
#定义会被容器自动执行的目录
ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
# 创建文件夹
RUN mkdir -p $WORK_PATH
#将所需文件放到容器中
COPY starWar.sql $WORK_PATH/
COPY setup.sh $AUTO_RUN_DIR/
#给执行文件增加可执行权限
RUN bash $AUTO_RUN_DIR/setup.sh
数据库docker的部署比前面两个稍微复制一些。数据库docker使用的是MySQL数据库,其中部署的时候需要配置一些环境参数,如MySQL登陆密码,WORK_PATH目录等。最后运行一个setup的脚本文件开启MySQL服务器。
setup.sh文件如下
mysql -uroot -p$MYSQL_ROOT_PASSWORD &
source $WORK_PATH/starWar.sql;
service start mysql
自动编排docker
部署结果
制备好上面三个部分的docker
服务都已开启
在外部访问网页
进行api查询