1. 运行web应用并设置ip和端口
1.1 经过前面几节内容的尝试,服务器里已经存在大量正在运行的无用容器。可以用下面两行命令全部删除:
sudo docker stop $(sudo docker ps -q) //先全部停用所有容器
sudo docker rm $(sudo docker ps -aq) //再删除所有容器
1.2 网络端口映射
sudo docker pull training/webapp //拉取镜像
sudo docker run -d --name hello-web -P training/webapp python app.py //创建并运行容器,随机映射端口
如图:
centos8+docker系列(4)——运行web应用
访问对应端口,页面如下:
centos8+docker系列(4)——运行web应用
除了随机映射端口,我们还可以限定端口映射规则,如下:
sudo docker run -d --name hello-web5001 -p5001:5000 training/webapp python app.py //将容器的5000端口映射到服务器的5001端口上
运行后如下:
1.3 容器互联
1.3.1 新建网络
sudo docker network create -d bridge test-net
1.3.2 容器互联
sudo docker run -itd --name test1 --network test-net ubuntu /bin/bash //test1链接网络text-net
sudo docker run -itd --name test2 --network test-net ubuntu /bin/bash //test2链接网络text-net
至此,test1 容器和 test2 容器建立了互联关系。
2.Dockerfile构建镜像
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
2.1 命令行创建Dockerfile文档
sudo mkdir Dockerfile //创建文件夹Dockerfile
cd mkdir Dockerfile //进入文件夹Dockerfile
sudo vi Dockerfile //在文件夹中创建一个文档Dockerfile,并进入编辑器
通过vi命令进入文档后,默认是处于命令行模式,我们要切换到插入模式才能输入文字
切换到插入模式:按键’i’,可以用来修改内容
切换到命令行模式:按键’esc’,可以用来移动光标到指定位置
退出vi且保存文件:在命令行模式下,按’:'冒号键进入“Last line mode”模式,输入:
: w filename 将文章以指定的文件名filename保存
: wq 保存并退出
: q! 不保存并强制退出
在编辑器中输入以下命令:
From nginx
Run echo '这是一个本地创建的镜像nginx' > /usr/share/nginx/html/index.html
保存并退出后,用命令行查看文档内容:
cat Dockerfile
3. 创建远程仓库,推送镜像
3.1 提交镜像
docker commit -a "by_lize" -m "文档网站" e149949b15a6 spms-doc:v1.0
-a:镜像作者信息
-m:镜像信息描述
e149949b15a6:我的仓库id
spms-doc:v1.0:我提交的镜像名称
此时查看本地镜像,发现已经存在我刚刚提交的镜像。
3.2 推送仓库
因为远程仓库的名称形式为:用户名/镜像名 所以我们需要在本地创建相同的镜像名称,并定义标签名,命令如下:
docker tag spms-doc:v1.0 zjsjlize/spms-doc:v1.0
然后推送镜像:
docker push zjsjlize/spms-doc:v1.0
4.创建javaweb应用
Dockerfile:
From openjdk:8-jdk-slim
LABEL maintainer="lize"
COPY target/xxxx.jar /app.jar //将要部署的jar包(假定在target文件夹下),复制到容器根目录下,取名app.jar
ENTRYPOINT ["java","-jar","app.jar"] //启动命令,启动app.jar
使用Dockerfile制作镜像:
docker build -t my-demo:v1.0 .
-t:为制作的镜像命名
-f:可选,选择依据的Dockerfile文件,可以是其它文件名。docker默认在本目录下找到名为Dockerfile的文件
.:当前文档路径,在命令行最后。一定不要忘记!!!必须要写上下文路径,才能找到正确的文件,才能运行Dockerfile