Docker 实验 pull_dockerfile_tomcat_ 简单 nginx

本贴最后更新于 348 天前,其中的信息可能已经时移世异

Docker 实验 pull_dockerfile_tomcat_简单 nginx

带“*”号的为省略,可选做

实验目的

1、掌握 Docker 安装方法。

2、掌握 Docker pull 服务及软件并应用的方法。

3、了解通过 Dockerfile 和 docker build 定制 docker 的方法

实验仪器设备/实验环境

1、Centos7 操作系统 2、Docker 仓库

实验原理

容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。

开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。

容器核心技术是指能够让 container 在 host 上运行起来的那些技术。

• 容器规范:为了保证容器生态的健康发展,保证不同容器之间能够兼容,包含 Docker、CoreOS、Google 在内的若干公司共同成立了一个叫 Open Container Initiative(OCI) 的组织,其目是制定开放的容器规范。

• 容器 runtime:runtime 是容器真正运行的地方。runtime 需要跟操作系统 kernel 紧密协作,为容器提供运行环境。lxc、runc 和 rkt 是目前主流的三种容器 runtime。

• 容器管理工具:容器管理工具对内与 runtime 交互,对外为用户提供 interface,比如 CLI。

• 容器定义工具:容器定义工具允许用户定义容器的内容和属性,这样容器就能够被保存,共享和重建。

• Registry:容器是通过 image 创建的,需要有一个仓库来统一存放 image,这个仓库就叫做 Registry。

容器 OS:容器 OS 是专门运行容器的操作系统。CoreOS、atomic 和 ubuntu core 是其中的杰出代表

实验内容

1、Docker 安装部署;

2、Docker pull 拉取镜像实现服务;

3、Dockerfile 和 Docker build 定制 ;

阿里云镜像加速 Docker(巨快)

直接把下列命令粘贴运行

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://knqne7y6.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker


Docker、镜像的安装

1、Docker 安装部署;

请尽量配置 yum 源为阿里云,这样 yum 安装快速

yum install -y docker-ce  安装docker
systemctl start docker  开启docker*
systemctl enable docker 
docker version  截图

修改防火墙设置

systemctl stop firewall
setenforce 0
getenforce

2、Docker pull 拉取镜像实现服务;

拉取一个 nginx 镜像

docker pull [镜像名]

docker images 查看已经拉取的镜像

docker run [...] [镜像名]

资料补充:

访问 http 测试:https://www.runoob.com/docker/docker-install-nginx.html

https://blog.csdn.net/Themoonlights_/article/details/122238597

腾讯云服务器在 Centos 中使用 nginx
https://www.tencentcloud.com/zh/document/product/214/32390

docker pull nginx

创建容器

docker run -d -p 8080:80 --name my-nginx nginx

这个命令将拉取最新版本的 Nginx 镜像并在容器中运行它。-d 参数表示在后台运行容器,-p 8080:80 表示将主机的 8080 端口映射到容器的 80 端口,--name my-nginx 表示将容器命名为 my-nginx。

修改 nginx web 页面为带学号和姓名信息的页面,

找到进程名进入,安装 vim 编辑器,然后进入/etc/nginx 编辑配置文件

docker exec -it my-nginx bash
cd /usr/share/nginx/html
vi index.html

这个命令将进入 my-nginx 容器并打开 /usr/share/nginx/html/index.html 文件。使用 vi 或其他编辑器修改网页内容并保存。

退出容器并重启 Nginx:

exit
docker restart my-nginx

这个命令将退出容器并在主机 shell 中重启 my-nginx 容器。Nginx 将重新加载配置文件和修改的网页内容。

在浏览器中访问修改后的网页:

http://localhost:8080

在浏览器中输入上述地址,即可访问修改后的网页。

*Docker 基础命令

启动

docker run 可加后面参数

--name="容器新名字" 为容器指定一个名称;

-d: 后台运行容器并返回容器 ID,也即启动守护式容器(后台运行);

-i:以交互模式运行容器,通常与 -t 同时使用;

-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;

也即启动交互式容器(前台有伪终端,等待交互);

-P: 随机端口映射,大写 P

-p: 指定端口映射,小写 p

/bin/bash 为进入 bash 命令行终端

docker run -it  ubuntu:16.04 /bin/bash
docker run -d redis:6.0.8

退出

docker stop bc588d5fa956/ubuntu

重启

docker restart bc588d5fa956

删除

docker ps
docker rm bc588d5fa956 
docker rm -f bc588d5fa956 //强制删除正在运行的容器 

查看容器日志

docker logs [CONTAINER ID]

查看已拉取的镜像

docker images 
docker images [IMAGE NAME]

查看容器内运行的进程

docker ps
top // linux查看进程
docker top // 查看docker运行的进程
docker inspect [CONTAINER ID] 

对容器改名

docker ps
docker rename [CONTAINER ID] [NEW_NAME]

进入正在运行的容器并以命令行进行交互

docker exec -it [CONRAINER ID] /bin/bash
docker attach -it [CONTAINER ID] // 一次性进入,只要进去在退出了就永久停止了

退出正在运行的容器

exit
或者
ctrl+p+q

从容器内拷贝文件到主机上

root@5ca4b4a8f971:/# cd /tmp
root@5ca4b4a8f971:/tmp# touch a.txt
root@5ca4b4a8f971:/tmp# ls
a.txt
exit

➜  /tmp docker cp 5ca4b4a8f971:/tmp/a.txt /tmp
Successfully copied 1.54kB to /tmp

➜  /tmp ls
a.txt                                                                         tmpaddon

导入和导出容器

docker ps
docker export [CONTAINER_ID] > myubuntu.tar  // 把整个容器打包成tar镜像
docker rm-f [CONTAINER_ID] // 删除容器
cat myubuntu.tar | docker import - root/ubuntu:16.04
-> sha256:9303fe3ca04f946c0c5698bf7af8969cde77f0ae1aef6eff5f137755f2f63296
docker images //查看镜像

➜  /tmp docker run -it --name cloud 9303fe3ca04f /bin/bash
root@041a2243cb04:/#

// 刚才的文件还在 备份恢复成功
root@041a2243cb04:/# cd /tmp
root@041a2243cb04:/tmp# ls
a.txt

image

*Docker 镜像

镜像分层,UnionFS 联合文件系统,可以把容器看作简易版的 Linux 的系统

image

docker commit 提交副本容器,使他成为新的镜像,或者可以用 DOCKERFILE

安装 vim

apt-get update
apt-get -y install vim

提交,定制版本

➜  ~ docker commit -m="vim cmd add ok" -a=="jpl" 6020ab0ffc8a jpl/ubuntu:1.3
sha256:06fbc784d58c75c71db55b958af55b921c36fb8eac27b6141bd6dfd81ad32035

➜  ~ docker images
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
jpl/ubuntu    1.3       06fbc784d58c   11 seconds ago   175MB

启动新镜像,vim 成功部署

docker stop cloud
cloud
➜  ~ docker ps
CONTAINER ID   IMAGE         COMMAND                   CREATED        STATUS        PORTS                                   NAMES
2d1cacd8b25d   redis:6.0.8   "docker-entrypoint.s…"   16 hours ago   Up 16 hours   6379/tcp                                magical_hamilton
c1c1c0b7f40d   nginx         "/docker-entrypoint.…"   3 days ago     Up 3 days     0.0.0.0:1080->80/tcp, :::1080->80/tcp   my-nginx
2d29fb18d7ff   nginx         "/docker-entrypoint.…"   3 days ago     Up 3 days     0.0.0.0:8080->80/tcp, :::8080->80/tcp   strange_panini
➜  ~ docker images
REPOSITORY    TAG       IMAGE ID       CREATED              SIZE
jpl/ubuntu    1.3       06fbc784d58c   About a minute ago   175MB
root/ubuntu   16.04     9303fe3ca04f   34 minutes ago       86.2MB
hello-world   latest    9c7a54a9a43c   7 days ago           13.3kB
tomcat        latest    311570738ca3   7 days ago           475MB
nginx         latest    448a08f1d2f9   8 days ago           142MB
centos        latest    5d0da3dc9764   20 months ago        231MB
ubuntu        16.04     b6f507652425   20 months ago        135MB
redis         6.0.8     16ecd2772934   2 years ago          104MB
➜  ~ docker run -it 06fbc784d58c /bin/bash
root@988f45401972:/# vim
root@988f45401972:/#

*Docker 容器卷

主机和容器实现共享 /宿主机决定路径:/容器目录

➜  image docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu:16.04
root@39f21ec174f1:/#

在共享的文件夹内 容器新建文件,宿主机也会同步

root@39f21ec174f1:/tmp/docker_data# cd /tmp/docker_data/
root@39f21ec174f1:/tmp/docker_data# touch build_form_ubuntu.txt
root@39f21ec174f1:/tmp/docker_data# ls
build_form_ubuntu.txt
root@39f21ec174f1:/tmp/docker_data# exit
exit
➜  image cd /tmp/host_data
➜  host_data ls
build_form_ubuntu.txt

查看容器

docker inspect 39f21ec174f1

容器关闭,宿主机新建文件,容器打开,文件夹依然同步共享

使容器可读可写:rw

image docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data:rw --name=u1 ubuntu:16.04

使容器可读不能写:ro

image docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1:ro ubuntu:16.04

使容器 2 继承容器 1 的卷规则

docker run -it --privileged=true --volumes- from u1 --name u2 ubuntu:16.04

*Docker 常规安装 Tomcat

Tomcat

docker search tomcat
docker pull tomcat

使用 tomcat 镜像运行实例

docker run -itd -p 8080:8080 --name=tomcat1 tomcat // -P随机分配端口

image

登陆到 Tomcat

➜  ~ docker exec -it dae867a97bc1 /bin/bash
root@dae867a97bc1:/usr/local/tomcat#

image

修改 webapps 文件权限

root@dae867a97bc1:/usr/local/tomcat# rm -r webapps
root@dae867a97bc1:/usr/local/tomcat# mv webapps.dist webapps

修改 sysctl.conf 的内核转发

通过 vim /etc/sysctl.conf 把里面的 net.ipv4.ip_forward = 0 修改为 net.ipv4.ip_forward = 1 后进行保存退出,通过 sysctl -p 命令使修改后的内核转发文件生效

进入 docker 容器,启动相对应的 tomcat 服务

通过 docker attach a85c8c323a30(正在启动的 docker 容器 ID)

image

进入 docker 容器后,通过 cd bin 进入 bin 目录下,找到 startup.sh 文件,直接输入 startup.sh 这个命令启动这个脚本后,这个 tomcat 服务就启动了

image

或者免修改版

docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8

如果端口占用了-> 端口解绑

1.查看8080端口是否被占用

netstat -anp | grep 8080

输出结果:tcp 0 0 :::8080 :::* LISTEN 3000/java

由上可知8080端口已经被开启。

2.查看占用8080端口的进程:

fuser -v -n tcp 8080

输出结果:

USER        PID   ACCESS COMMAND   8080/tcp:

zhu        1154    F.... java

3.杀死占用8080端口的进程:

kill -s 9 1154(自己的进程号).

4.查看所有进程:

ps

输出结果:

PID TTY          TIME CMD

2949 pts/1    00:00:00 bash

3037 pts/1    00:00:00 ps

这是便可发现1154进程已经不存在了

编写 Dockerfile 文件-JDK8

用来构造 Dokcer 镜像的文本文件,随时变化,dockerfile 独立于 docker 外部
Dockerfile 面向开发,Docker 镜像成为交付标准,Docker 容器则涉及部署与运维,三者缺一不可,合力充当 Docker 体系的基石。

关键保留字要大写

image

image

image

下载 JDK8:https://mirrors.yangxingzhen.com/jdk/

image

把下载好的 jdk8 移动到根目录的 myfile 文件夹

mv jdk-8u171-linux-x64.tar.gz /myfile

编写 Dockerfile 文件-jdk8

➜  /myfile vim Dockerfile

vim命令: ggvG d全选删除
FROM ubuntu:16.04
MAINTAINER jpl<jiangpeilin22@s.nuit.edu.cn>

ENV MYPATH /usr/local
WORKDIR $MYPATH

#安装vim编辑器
#安装ifconfig命令查看网络IP
#安装java8及lib库
RUN apt-get update && \
    apt-get install -y wget vim net-tools locales build-essential && \
    rm -rf /var/lib/apt/lists/*

# 添加中文支持
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN locale-gen zh_CN.UTF-8 && \
    DEBIAN_FRONTEND=noninteractive dpkg-reconfigure locales
ENV LANG zh_CN.UTF-8
ENV LANGUAGE zh_CN:zh
ENV LC_ALL zh_CN.UTF-8
ENV LC_ALL="C.UTF-8" LANG="C.UTF-8"

#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
LABEL Description="This image is the base os images."  Version="1.0"
RUN echo "Asia/Shanghai" > /etc/timezone

#在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /usr/local/java
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

EXPOSE 80

CMD echo $MYPATH && echo "success--------------ok" && /bin/bash

docker build -t ubuntujava8:1.5 .

docker build -t [NAME]:[VERSION] .

空格加一点代表指定当前文件夹

image

image

验证

docker run -it --name jpl 8fb5d66ad6f3 /bin/bash

vim

imageifconfig

imagejdk

image

编写 Dockerfile 文件-tomcat

下载 Tomcat7
https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.70/src/

新建一个文件夹,并命名为 tomcat7-jre7

mkdir tomcat7-jre7

image

将下载的 tomcat 复制到该目录:

mv /root/Downloads/apache-tomcat-7.0.70-src.tar.gz /tomcat7-jre7

创建 Dockerfile 文件

cd tomcat7-jre7

touch Dockerfile

# Base image
FROM ubuntujava8:1.5

# Install dependencies
RUN apt-get update && \
    apt-get install -y openjdk-8-jdk wget && \
    apt-get clean

# Download and extract Tomcat
RUN mkdir -p /opt/tomcat && \
    wget -O /tmp/tomcat.tar.gz http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.70/bin/apache-tomcat-7.0.70.tar.gz && \
    tar xzvf /tmp/tomcat.tar.gz -C /opt/tomcat --strip-components=1 && \
    rm /tmp/tomcat.tar.gz

# Set environment variables
ENV CATALINA_HOME /opt/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH

# Remove unnecessary files
RUN rm -rf $CATALINA_HOME/webapps/examples $CATALINA_HOME/webapps/docs

# Expose Tomcat default port
EXPOSE 8080

# Start Tomcat
CMD ["catalina.sh", "run"]

docker build -t ubuntutomcat:1.0 .
docker run  -d -p 8080:8080 234ab654772f

image

*本地镜像发布阿里云

image

阿里云

https://cr.console.aliyun.com/cn-hangzhou/instances

  1. 登录阿里云 Docker Registry
docker login --username=aliyun1451226290 registry.cn-hangzhou.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

  1. 从 Registry 中拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/patrickchiang/myubuntu:[镜像版本号]

docker pull registry.cn-hangzhou.aliyuncs.com/patrickchiang/myubuntu:1.3

  1. 将镜像推送到 Registry
docker login --username=aliyun1451226290 registry.cn-hangzhou.aliyuncs.com
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/patrickchiang/myubuntu:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/patrickchiang/myubuntu:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

docker login --username=aliyun1451226290 registry.cn-hangzhou.aliyuncs.com
docker tag 06fbc784d58c registry.cn-hangzhou.aliyuncs.com/patrickchiang/myubuntu:1.3
docker push registry.cn-hangzhou.aliyuncs.com/patrickchiang/myubuntu:1.3

image

  1. 选择合适的镜像仓库地址

从 ECS 推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于 VPC 网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为 Registry 的域名登录。

  1. 示例

使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至 Registry。

$ docker images
REPOSITORY                                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry.aliyuncs.com/acs/agent                                    0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB
$ docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

使用 "docker push" 命令将该镜像推送至远程。

docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

image

image

验证:

删除本地镜像

➜  ~ docker rmi -f 06fbc784d58c
Untagged: jpl/ubuntu:1.3
Untagged: registry.cn-hangzhou.aliyuncs.com/patrickchiang/myubuntu:1.3
Untagged: registry.cn-hangzhou.aliyuncs.com/patrickchiang/myubuntu@sha256:1411c2cbc75c54d2b0518ca4e38dac3bab1f11a50001771f9f8f821965f0cfe3
Deleted: sha256:06fbc784d58c75c71db55b958af55b921c36fb8eac27b6141bd6dfd81ad32035

拉取

➜  ~ docker pull registry.cn-hangzhou.aliyuncs.com/patrickchiang/myubuntu:1.3
1.3: Pulling from patrickchiang/myubuntu
03334ed17bce: Already exists
7fb45c3d1066: Already exists
Digest: sha256:1411c2cbc75c54d2b0518ca4e38dac3bab1f11a50001771f9f8f821965f0cfe3
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/patrickchiang/myubuntu:1.3
registry.cn-hangzhou.aliyuncs.com/patrickchiang/myubuntu:1.3
➜  ~ docker images
REPOSITORY                                                 TAG       IMAGE ID       CREATED             SIZE
registry.cn-hangzhou.aliyuncs.com/patrickchiang/myubuntu   1.3       06fbc784d58c   26 minutes ago      175MB
root/ubuntu                                                16.04     9303fe3ca04f   About an hour ago   86.2MB
hello-world                                                latest    9c7a54a9a43c   7 days ago          13.3kB
tomcat                                                     latest    311570738ca3   7 days ago          475MB
nginx                                                      latest    448a08f1d2f9   8 days ago          142MB
centos                                                     latest    5d0da3dc9764   20 months ago       231MB
ubuntu                                                     16.04     b6f507652425   20 months ago       135MB
redis                                                      6.0.8     16ecd2772934   2 years ago         104MB

安装, 成功打开 vim

image

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    476 引用 • 899 回帖
2 操作
patrickal 在 2023-05-14 00:53:42 更新了该帖
patrickal 在 2023-05-13 01:52:02 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...