******注意,实验结束请立即删除云主机,节省费用******
******注意2,实验未结束且短期内不会继续实验,也请删除云主机。下次实验时重新创建******
实验步骤 一)
实验步骤 二)
实验步骤 三)
实验步骤 四)
作业1~作业4
(只需要截图)。实验报告转成“学号-实验二.pdf”
,并上传至http://113.31.104.68:3389/index.htm10月xx日
云主机uhost, 私有网络vpc,基础网络unet, Docker相关技术
云主机uhost, 基础网络unet
一个开放源代码项目,通过在Linux上提供OS级虚拟化的附加抽象层和自动化层,使容器内软件应用程序的部署自动化。
直到几个版本之前,在OSX和Windows上运行Docker还是很麻烦的。但是,最近,Docker已投入大量资金来改善其用户在这些OS上的入职体验,因此,现在运行Docker是一个轻而易举的事。
$ docker run hello-world
Hello from Docker.
This message shows that your installation appears to be working correctly.
...
到此为止,你的docker环境已经安装完成并且正常运行,接下来我们尝试一些更加复杂的工作
docker run
命令去开启一个BusyBox container
BusyBox Image
:$ docker pull busybox
如果运行过程中遇到 permission denied 此类的错误,可以尝试在命令前加入 sudo 命令
busybox image
从docker仓库中拉取到本地,你可以使用docker image命令查看系统上目前已有的image.$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRT
busybox latest c51f86c28340 4 weeks ago 1.10
docker run
命令来运行busybox
$ docker run busybox
$
docker run
命令时,docker会从本地查找image
,然后加载image
并在容器中运行command。让我们加入自定义的command再试一次$ docker run busybox echo "hello from busybox"
hello from busybox
**************作业1:请将上述涉及docker run/image的操作界面截图,并插入实验报告中***************
docker ps 命令可以查看当前正在运行的所有容器的状态,包括
CONTAINER ID
、IMAGE
、COMMAND
、CREATE (创建时间)
、STATUS (容器状态)
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
305297d7a235 busybox "uptime" 11 minutes ago Exited (
ff0a5c3750b9 busybox "sh" 12 minutes ago Exited (
14e5bd11d164 hello-world "/hello" 2 minutes ago Exited (
docker run -it 可以在我们创建 container 的同时,以交互式的形式获取到 container shell 的控制权. 我们可以在docker run 命令中使用--name custom_name 来指定container的名称,若不指定,docker会为我们随机生成一个名字
busybox container
:$ docker run -it busybox sh
/ # ls
bin dev etc home proc root sys tmp usr var
/ # uptime
05:45:21 up 5:58, 0 users, load average: 0.00, 0.01, 0.04
docker rm -args 可以删除不在运行的container,
args
可以是container name/id (可以不写完整,但必须保证唯一)
$ docker rm 305297d7a235 ff0a5c3750b9
305297d7a235
ff0a5c3750b9
$ docker rm 305 ff
305297d7a235
ff0a5c3750b9
ps
命令检查一下是否删除成功吧!**************作业2:请手动创建ubuntu:18.04 image的container并将cpu信息截图,并插入实验报告中***************
Hint: 可以使用lscpu命令查看linux的硬件信息,显示界面大致如下
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 4
Vendor ID: GenuineIntel
CPU family: 6
Model: 158
Model name: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
Stepping: 9
CPU MHz: 2800.000
BogoMIPS: 5616.00
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 6144K
...
docker
与虚拟机不同之处在于,在部署复杂的应用时,docker
可以灵活的从docker hub
中pull
各种image
(如:mysql
、sqlserver
、java
、php
.etc.),并将它们自由的组合到一起,使得每个container
都能发挥自己独特的作用。那么我们先从简单的部署单页面的静态网页开始吧!static-web app
docker hub
上有许多开发者们上传的image
,我们可以自由下载并且使用,这里我们使用到的image
是prakhar1989/staticsite
,这是一个搭载了简单的静态单页面的Nginx镜像,让我们来试者运行它:$ docker run --rm prakhar1989/static-site
Nginx is running...
--rm
参数的作用是当container运行结束时系统自动删除该container
nginx is running...
,但是目前容器对我们来说是一个完全封闭的环境,我们并没有办法去访问container
的端口container
映射到本地到此为止,我们已经部署了一个静态的nginx container
但是并没有办法去访问,docker
提供了许多接口去解决这个问题,我们可以通过添加参数的方式将container
的端口或者文件夹映射到本地
-d | 将container置于后台运行 |
---|---|
-p local_port:container_port | 将container 的某个端口映射到本地 |
-P | 将container所有正在监听的端口全部映射到本地的随机端口 |
-v local_path:contatiner_path | 将container的某个文件路径映射到本地 |
static-site
默认监听的80
和443
端口,我们使用上述参数尝试将它映射到本机$ docker run -d -P --name static-site prakhar1989/static-site
e61d12292d69556eabe2a44c16cbd54486b2527e2ce4f95438e504afb7b02810
$ docker port static-site
80/tcp -> 0.0.0.0:32769
443/tcp -> 0.0.0.0:32768
docker
将container
的80
和443
分别映射到了本机的32769
和32768
两个端口上####.打开浏览器,访问http://localhost:32769
,得到如下页面:
**************作业3:尝试使用-v、--rm和-p等参数,创建static-site容器,并以自己的学号命名,将container的/usr/share/nginx/html文件夹映射到当前目录的html文件夹,并修改index.html文件,加入自己的姓名和学号,并将上述步骤和本地目录接口截图插入实验报告中***************
Hint:
1.若提示continer正在运行中,可以使用
docker stop static-site && docker rm static-site
删除正在使用的容器并重新创建.
- -v local_path请使用绝对路径