docker常用的命令,很详细
一、从hello-world开始1、下面是运行名为helloworld的镜像,先把hello-world镜像拉取到本地,命令如下:docker pull hello-world接下来运行hello-world镜像,命令如下:docker run hello-world出现如下界面说明运行成功了二、接下来是查看本地有哪些镜像的的命令1、先简单使用一下docker images运行结果如下:现在就当只
一、从hello-world开始
1、下面运行名为helloworld的镜像,先把hello-world镜像拉取到本地,命令如下:
docker pull hello-world
这个拉取的命令,后面再详细说明。
接下来运行hello-world镜像,命令如下:
docker run hello-world
出现如下界面说明运行成功了
二、接下来是查看本地有哪些镜像的的命令
1、先简单使用一下
docker images
运行结果如下:
现在就当只有hello-world镜像其他先不用管。
参数解释
REPOSITORY:表示镜像仓库源,可以作为运行镜像的参数,比如像上面提到的docker run hello-world。
TAG:镜像的标签,这是用于查看镜像的版本。
IMAGE ID:镜像的id,可以作为运行镜像的参数,像运行hello-world镜像的docker run hello-world也可使用docker run bf756fb1ae65替换,效果一样。
CREATED:镜像的创建时间,看看就行。
SIZE:镜像的大小,看看就行。
2、这个命令还没完,后面还可以加参数-a,-a表示所有
docker images -a
这个命令表示列出本地所有的镜像,运行效果如下:
3、docker images加-q参数,表示只列出本地镜像的IMAGE ID
docker images -q
运行结果如下:
4、其中-a和-q参数可以一起使用,表示列出本地所有镜像的所有IMAGE ID,运行、删除镜像会用到IMAGE ID,以后要运行镜像时,这个命令会很好用。
docker images -aq
运行结果如下:
5、加上–digests,显示镜像的摘要信息
docker images --digests
运行结果如下:
6、加–digests --no-trunc,显示完整的镜像信息,就是多了描述和完整的IMAGE ID
docker images --digests --no-trunc
运行结果如下:
7、加上镜像名可以查看指定的镜像,比如我要查看centos的镜像,命令如下:
docker images centos
运行结果如下:
三、然后是帮助命令,这个命令很重要,是用于查看docker常用命令的命令
docker --help
运行结果如下:
英语功底好的小伙伴可以试着自己看,英语不好的也可以借助翻译软件哈!
四、Linux有查找文件的命令,docker同样有查找镜像的命令
1、先简单使用一下,比如查找tomcat镜像的命令,docker查找tomcat镜像的命令如下:
docker search tomcat
运行结果如下:
2、加上-f=stars=30查找stars大于三十,就是点赞数大于三十的tomcat镜像,命令如下:
docker search -f=stars=30 tomcat
运行结果如下:
五、前面已经提到了拉取镜像的命令,现在来详细说明一下
1、先简单使用一下,比如说我们要拉取Redis镜像,命令如下:
docker pull redis
运行结果如下:
等待拉取完成即可,再用docker images命令看看镜像有没有拉取成功
运行结果如下:
docker pull redis相当于docker pull redis:latest,冒号后面的是版本号,就是默认拉取该镜像的最新版本,要拉取指定的版本可以在冒号后面带上相应的版本号即可。
六、拉完镜像了,有些镜像不需要时,我们可以考虑怎么删除。
1、先简单使用一下删除镜像的命令,比如说要删除hello-world镜像,命令如下:
docker rmi hello-world
运行结果如下:
报错是因为之前运行过hello-world镜像,而镜像里面是一层一层的,删除一个镜像相当于删除一组文件,当然会报错,参考Linux删除一组文件的情况,下面才是docker删除hello-world的正确姿势,即相当于删除多个镜像
docker rmi -f hello-world
运行结果如下:
ok,删除成功了!
2、接下来是删除本地全部镜像,命令如下:
docker rmi -f $(docker images -qa)
这个慎用哈,咱就不试了。
七、上面已经明白了如何拉取、移除以及查看容器的基本信息,接下来咱们来看看如何运行容器。
1、在运行容器前先用docker images命令查看容器的基本信息,
接着运行容器,可以使用容器的REPOSITORY或者IMAGE ID运行容器,比如说我要运行centos的镜像,命令如下:
docker run -it 300e315adb2f
其中参数-i表示以交互模式运行容器,-t表示为容器重新分配一个伪输入终端。-i与-t通常同时使用。
运行结果如下:
就是以IMAGE ID为300e315adb2f的centos镜像生成了e4fb459c2ec5容器。centos镜像就像java中的类,e4fb459c2ec5容器就像以这个类生成的对象。上面图就是生成容器并且进入了容器。
ctrl+P+Q回到宿主机中使用docker ps查看运行结果。
可以看到容器已经成功运行了。
docker ps是查看所有正在运行的容器的命令,在下面会详细说明。而names是默认随机分配的名字。
2、当然也可以用镜像名来运行一个镜像,比如要运行centos镜像,和使用IMAGE ID运行容器的效果一样。
docker run -it centos
3、我们也可以在容器运行时为容器取一个名字。比如我们在运行centos容器时为容器取名myCentos,命令如下:
docker run -it --name myCentos 300e315adb2f
运行结果如下:
ctrl+P+Q回到宿主机中查看。
取名成功!
4、也可以使用start + CONTAINER ID启动之前运行过,但已经停止的容器,比如我们要启动CONTAINER ID为6294de45d6b9容器,命令如下:
docker start 6294de45d6b9
运行结果如下:
docker ps -n 5命令表示查看最近运行过的5个容器,后面会详细说明。
5、我们也可以使用指定的端口运行容器,这里以tomcat为例,比如我要使用8888端口运行tomcat镜像,命令如下:
docker run -it -p 8888:8080 tomcat
出现如下界面表示运行成功啦!
其中-p后指定端口号为8888,8080是运行tomcat容器的端口,可以在宿主机使用 localhost:8888
访问到tomcat界面,现在使用最新版的tomcat镜像用 localhost:8888 是看不了tomcat的界面。使用8.5.32版本的tomcat则可以访问到tomcat主界面。
也可以在本机使用宿主机的ip地址+端口号进行访问,记得在访问前关闭防火墙。
6、也可以加-P随机分配端口号,命令如下:
docker run -it -P tomcat
运行结果如下:
查看一下端口号。
49154就是随机分配的端口,到宿主机访问一下!
八、在宿主机查看正在运行的容器
1、我们都知道Linux查看当前所有进程的命令是ps -ef 而宿主机中查看当前所有正在运行容器的命令也类似,如下:
docker ps
运行结果如下:
这是上面刚刚运行的容器。
2、加上-l表示查看上一次运行的容器。这个一般在退出容器后查看刚刚退出了什么容器。命令如下:
docker ps -l
完整的操作流程如下:
exit是退出容器的命令,后面再说。
3、加上-a表示查看所有运行过的容器,命令如下:
docker ps -a
运行结果如下:
4、有时候我们并不需要查看全部运行过的容器,只查看最近几次运行过的容器就够了,比如我们要查看最近三次运行过的容器,命令如下:
docker ps -n 3
运行结果如下:
5、加上-q表示只显示当前正在运行的容器的编号,为了演示重新运行了centos容器。
docker ps -q
运行效果如下:
若是使用这个命令没有出现容器id时表示宿主机没有容器在运行。
6、加上-lq表示显示上一次运行的容器编号,命令如下:
docker ps -lq
运行结果如下:
九、有运行就有退出。
1、若当中在容器中,需要退出容器回到本机,docker退出容器的命令如下:
exit
运行结果如下:
使用docker ps命令在主机查看一下还有没有运行的容器。
成功退出!
2、有时候我们需要回到宿主机,但不退出当前容器,按快捷键ctrl+P+Q,操作结果如下:
使用docker ps命令看看容器还在不在。
操作成功!
3、也可以通过stop + CONTAINER ID退出容器,命令如下:
docker stop 6294de45d6b9
运行结果如下:
4、还可以使用kill + CONTAINER ID强制退出容器,命令如下:
docker kill 6294de45d6b9
运行结果如下:
十、有些容器不需要了怎么处理,当然是删除了,这个删除和前面提到的删除镜像不一样,前面删除的相当于类,现在删除的相当于对象。
1、我们先删一下没有运行的容器,通过容器的CONTAINER ID进行删除,命令如下:
docker rm fd17620ec6a8
运行结果如下:
上图中STATUS下有 Exited表示该容器已经停止运行了。
2、加上-f时正在运行的容器也能删除,比如我要通过CONTAINER ID删除NAMES为myCentos容器,命令如下:
docker rm -f 9bc545f3c140
运行结果如下:
3、也可以一次性删除多个容器,命令如下:
docker rm -f $(docker ps -q)
也可以用如下命令:
docker ps -a -q | xargs docker rm
xargs表示可变参数,通过指定容器id删除容器
十一、前面已经提到了使用docker run -it 容器名或容器id运行并进入容器,有时我们只想要运行容器而不进入容器时该怎么办呢?咱们来看看让容器运行在后台的命令。
1、让容器在后台运行只需要将-it改为-d就行了,比如我们要通过IMAGE ID在后台运行centos容器,命令如下:
docker run -d 300e315adb2f
可以看到通过docker ps命令查看正在运行的容器时看不到任何内容,但我的容器确实启动了,这是怎么回事?这是因为在centos以后台进程模式运行,导致docker前台没有运行的应用,docker觉得没有事情可做,就立马停止了容器。那要怎么做才能让运行在后台的容器不立马停止呢?
2、先看看下面这条命令:
docker run -d 300e315adb2f /bin/sh -c "while true;do echo hello ll;sleep 2;done"
表示运行IMAGEID为300e315adb2f的centos镜像,以sh脚本运行""内的代码,代码的意思是每两秒打印一次hello ll
运行结果如下:
这样就实现了让容器在后台运行。使用docker ps命令也可以看到当前正在运行的容器了。
我们通过打印日志的命令,看看容器在后台打印的内容,命令如下:
docker logs bc0ee4d57a9a
运行结果如下:
加上-t表示显示时间,命令如下:
docker logs -t bc0ee4d57a9a
运行结果如下:
在上面的命令上加上-f表示追加,命令如下:
docker logs -t -f bc0ee4d57a9a
运行结果如下:
效果截图上看不出来,会在后面不停地追加hello ll及其打印时间。
这样看也太长了可以加上–tail 数字打印最后的几行,数字是几就表示打印最后几行的日志,比如我只要查看最后的5行,命令如下:
docker logs -t -f --tail 5 bc0ee4d57a9a
运行结果如下:
结果不止5行?因为-f没有去掉,而它会不停地追加。
十二、我们有时也想要查看容器内运行的进程以及细节。
1、咱以上面的十一为例,查看该容器内部的进程,命令如下:
docker top bc0ee4d57a9a
运行结果如下:
2、再看看容器内部的细节,命令如下:
docker inspect bc0ee4d57a9a
运行结果如下:
因为内容太多就只截了一部分。
十三、前面已经提到了如何运行一个容器以及如何退出到宿主机,让容器运行在后台,那怎么再次进入到容器的交互界面呢?
1、先把前面的容器干掉并重新运行centos容器,操作如下:
重新进入容器,命令如下:
docker attach 6294de45d6b9
运行结果如下:
2、也可以在宿主机上操作容器,而无需进入容器中操作,比如我们要查看容器中/tmp目录下的内容,命令如下:
docker exec -t 6294de45d6b9 ls -l /tmp
运行结果如下:
我们会发现这根进入容器中查看的效果是一样的。
3、我们也可以通过exec的其他命令进入容器,命令如下:
docker exec -t 6294de45d6b9 /bin/bash
运行结果如下:
十四、如果我们在退出容器时想要保存容器的文件到宿主机怎么做?继续往下看哈!
1、比如我们要拷贝log.txt文件到宿主机的root目录,先到宿主机的root目录下查看所有文件。可以看到我们的root目录是没有log.txt文件的
进入某个容器,具体操作如下:
接着我们将容器中的log.txt文件拷贝的宿主机的root目录中,命令如下:
docker cp 6294de45d6b9:/tmp/log.txt /root
运行结果如下:
注意容器id后面跟了个冒号,再接文件路径。
十五、使用docker命令会出现错误,确定命令没错还是这样,可以尝试使用重启docker解决。 重启docker的命令如下:
systemctl restart docker
运行结果如下:
不报错代表重启成功。
到这里docker的常用命令已经讲完了,接下来的是对docker的深入学习。
十六、前面运行的都是从其他网站拉取过来的镜像,我们也可以自己造一个镜像。
1、我们就造一个tomcat镜像,以正在运行的8.5.32版本的容器为基,造一个REPOSITORY 为test/centos的镜像,命令如下:
docker commit -a="gan" -m="my tomcat" 5f22bc02de8d test/centos:1.1
完整的操作流程如下:
参数解释
-a是指明作者。
-m是添加对新建镜像的描述。
注意造镜像使用的是容器id(CONTAINER ID)而不是镜像id(IMAGE ID)
2、接下来我们看看能不能运行自己造的tomcat,运行的命令如下:
docker run -it test/centos:1.1
因为镜像名后面默认带的是:latest,而我们造镜像时指明了版本号,所以启动镜像时要带上版本号。
完整的操作流程如下:
再打开其他的窗口看一下。
ok,运行成功!再到宿主机看看能不能看到tomcat的主页面。
成功访问!
3、我们也可以让自定义的容器在后台运行,指定访问端口为6666,其实就是没有打印日志的效果,命令如下:
docker run -d -p 7778:8080 test/centos:1.1
运行结果如下:
到宿主机看看能不能访问。
ok,成功访问!
十七、docker容器总要关闭的时候,但我们关闭时想要把里面的数据持久化到宿主机怎么办?继续往下看吧!
1、我们要在宿主机的根目录目录创建一个myDataVolume,在容器里的根目录创建一个dataVolumeContainer的文件。可以在下图看到一开始是没有这两个文件的。
关闭centos容器,接下来在宿主机中使用命令创建创建这两个文件,命令如下:
docker run -it -v /myDataVolume:/dataVolumeContainer centos
运行结果如下:
成功把这两个文件创建出来了。
参数解释
-v表示新建文件的意思。冒号前面的是宿主机的文件新建目录,后面的是容器中的文件的新建目录,注意是完整目录。
2、’接下来使用命令查看一下文件有没有绑定成功,命令如下:
docker inspect e3c64912030a
后面的是刚刚运行的容器id号,运行结果如下:
宿主机centos7在Mounts下。
3、接着在宿主机的myDataVolume新建一个host.txt文件,操作如下:
再去容器中看看有没有对应的文件,操作如下:
到容器里的host.txt文件中添加一个一些内容看看能不能同步到宿主机,操作如下:
保存并关闭,再去宿主机中的对应文件看看有没有更新内容。
同步成功!
4、接着在容器中创建一个container.txt的文件,看看能不能同步到宿主机。操作如下:
回到宿主机看看。
同步成功!
5、接着我们把容器关了。
注意别用docker rm -f $(docker ps -q),用了后就不能使用 docker ps -l 在最近运行的容器中看到退出的容器。
再创建一个host02.txt文件,然后在container.txt文件中更新一些文件的内容。操作如下:
启动centos容器,查看一下有没有同步更新文件。
同步成功!
7、我们也可以在使用命令创建文件的同时加上权限,使得在容器中创建的文件只读不可写,为了项目演示明显先将之前在宿主机创建的myDataVolume文件夹删除,容器中的dataVolumeContainer文件夹就不用删了,使用命令后会覆盖。操作如下:
8、在之前的使用的绑定命令的基础下加上:ro,表示容器绑定的文件夹下的文件是只读的,命令如下:
docker run -it -v /myDataVolume:/dataVolumeContainer:ro centos
运行结果如下:
在宿主机创建host.txt文件并添加内容。
再回到容器中看看,可以看到内容是成功同步过来的,但创建文件则不允许,因为前面只是给了只读的权限。
使用命令查看一下具体的内容,命令如下:
docker inspect 4009239e6bd1
运行结果如下:
可以看到是成功绑定了没错,但没有读写的权限。
十八、使用dockerFile添加容器加载卷,就像上面使用命令绑定文件夹一样,这样的绑定方式可以绑定多个容器下的文件夹,而上面哪个方式不行,建议看这一块对比着上面那一块看。
1、先去根目录下的mydocker文件下编辑Dockerfile文件,编辑的内容如下:
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------------success1"
CMD /bin/bash
接着使用命令构建镜像,命令如下:
docker build -f /mydocker/Dockerfile -t my/centos .
运行结果如下:
参数解释
-f后面接的是Dockerfile文件的目录。
-t后面接的是构建镜像的镜像名。
注意命令的最后面还有一个点。
接着运行一下这个自己造的镜像,命令如下:
docker run -it my/centos
运行结果如下:
可以看到开始就给我们建好了两个文件。
2、我们在dataVolumeContainer1文件下新建个container.txt文件,操作如下:
可是我们没有指定宿主机的目录,我们可以使用命令查看镜像的细节,命令如下:
docker inspect 1420090eb29a
完整的操作如下:
宿主机centos7对应的目录在Mounts下的Source,具体如下:
复制这一目录,到宿主机查看该目录下的内容,具体操作如下:
可以看到前面创建的文件已经在这了。
二十、现在我们知道了宿主机的文件可以与容器共享,那如何做到宿主机中的文件夹与容器共享,该容器下的文件夹再与其他容器共享。
1、还是使用自己造my/centos镜像创建容器,给这个容器取名dc01,作为父容器,命令如下:
docker run -it --name dc01 my/centos
在dataVolumeContainer2目录下创建dc01_add.txt,完整操作如下:
2、再使用my/centos镜像造两个容器dc02、dc03,他们的父容器都是dc01。先造dc02的子容器,命令如下:
docker run -it --name dc02 --volumes-from dc01 my/centos
再到dataVolumeContainer2目录下看看有没有dc01中创建的dc01_add.txt文件,完整的操作如下:
可以看到dc01_add.txt文件已经存在了。我们在dc02下也创建一个文件dc02_add.txt,操作如下:
然后创建一个dc03的容器,命令如下:
docker run -it --name dc03 --volumes-from dc01 my/centos
看看dataVolumeContainer2目录下有没有dc01和dc02添加的文件,完整的操作如下:
在dc03也创建一个dc03.txt文件,完整的操作如下:
二十一、接下来我们在Dockerfile2中自定义一个镜像。
1、首先编辑Dockerfile2文件,加入如下配置:
FROM centos
MAINTAINER gan<gan167@126.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "success---------------------ok"
CMD /bin/bash
运行结果如下:
接着使用命令构建一下镜像,镜像名为mycentos,命令如下:
docker build -f /mydocker/Dockerfile2 -t mycentos:1.3 .
运行结果如下:
中间看到爆红不是错,最后看到Successfully 什么的表示构建成功。
如果使用构建命令后出现如下的错:
解决办法是在mydocker目录下新建一个 .dockerignore ,编辑内容为 * ,保存退出即可,如下所示:
如果使用构建命令后出现如下的错:
解决办法是编辑sysctl.conf配置文件,重启network和docker服务,命令如下:
vi /etc/sysctl.conf
在配置文件内容的最后面加入如下配置,配置内容如下:
net.ipv4.ip_forward=1
重启network和docker服务,命令如下:
systemctl restart network && systemctl restart docker
查看是否配置成功,命令如下:
sysctl net.ipv4.ip_forward
完整的操作过程如下:
虽然解决了问题,但由于本人初学docker,没搞懂为什么要这么做。
二十二、接着我们创建一个可以查询ip地址的centos镜像。
1、先到mydocker目录下新建一个Dockerfile3文件,并编辑以下内容:
FROM centos
RUN yum install -y curl
CMD [ "curl", "-s", "https://ip.cn" ]
完整的操作过程如下:
2、然后使用命令构建一个名为myip的镜像,命令如下:
docker build -f /mydocker/Dockerfile3 -t myip .
运行结果如下:
注意要在最后面看到Successfully什么的才算构建成功。
3、镜像已经构建好了,接下来我们运行一下看看有什么效果吧,运行命令如下:
docker run -it myip
运行结果如下:
这是https://ip.cn域名下的html页面,在浏览器看是这样的:
4、我们在运行myip的镜像时后面加上-i看看会有上面结果,参数-i有显示域名html文件的作用。操作如下:
可以看到已经报错了,后面加-i相当于在Dockerfile4文件中的最后面加上CMD
["-i"],这样会会覆盖前面的CMD语句,而纯粹的-i不是docker的命令,直接使用-i是不被允许的。
二十三、但CMD只执行最后一个CMD语句,前面的CMD会被覆盖掉,试试将CMD改为ENTRYPOINT会有什么结果。
1、拷贝一份Dockerfile3为Dockerfile4,具体内容如下:
FROM centos
RUN yum install -y curl
ENTRYPOINT [ "curl", "-s", "https://ip.cn" ]
完整的操作如下:
2、基于Dockerfile4文件构建一个名为myip2的镜像,命令如下:
docker build -f /mydocker/Dockerfile4 -t myip2 .
运行结果如下:
3、接下来加上-i参数看看有什么结果。运行结果如下:
可以看到显示出了域名的html内容。RNTRYPOINT相当于在后面追加-i参数。
二十四、接着我们看看ONBUILD关键字的效果。
1、先拷贝一份Dockerfile4为Dockerfile5,Dockerfile5具体内容如下:
FROM centos
RUN yum install -y curl
ENTRYPOINT [ "curl", "-s", "https://ip.cn" ]
ONBUILD RUN echo "father images onBuild----------886"
完整的操作如下:
2、基于Dockerfile5文件构建myip_father镜像,命令如下:
docker build -f /mydocker/Dockerfile5 -t myip_father .
运行结果如下:
3、接着拷贝Dockerfile3为Dockerfile6,作为myip_father子类,具体的内容如下:
FROM myip_father
RUN yum install -y curl
CMD [ "curl", "-s", "https://ip.cn" ]
完整的操作过程如下:
4、基于Dockerfile6文件构建一个myip_son镜像,命令如下:
docker build -f /mydocker/Dockerfile6 -t myip_son .
运行过程如下:
可以看到出现了父镜像中的内容。
二十五、接着我们自定义一个tomcat9。
1、先建好文件目录,拷贝tomcat和jdk压缩包到该目录,过程如下:
2、编辑Dockerfile文件,文件内容如下:
FROM centos
MAINTAINER ll<ll@qq.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u241-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.44.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_241
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.44
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.44
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.44/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.44/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.44/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.44/bin/logs/catalina.out
3、然后我们基于Dockerfile构建名为lltomcat9的自定义tomcat镜像,命令如下:
docker build -t lltomcat9 .
这里省略了 -f 具体路径 因为docker默认读取当前目录的Dockerfile文件进行构建镜像。
运行结果如下:
中途出现红色只是警告,不是报错,如下:
记得要看到Successfully才算构建成功哦。
4、然后运行一下lltomcat9这个镜像,取名myt9,命令如下:
docker run -d -p 9080:8080 --name myt9 -v /gan/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.44/webapps/test -v /gan/mydockerfile/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.44/logs --privileged=true lltomcat9
别看-v后面那么长,只是容器卷而已,就是宿主机的目录对应容器的目录,:前面的宿主机的目录,后面的容器里的目录。这里建了两个容器卷。–privileged=true解决写权限不够的问题。
运行结果如下:
运行成功!我们到宿主机看看能不能访问成功。
ok!
5、看看拷贝过来的txt文件在不在,过程如下:
6、看看myt9容器的jdk环境版本。操作过程如下:
二十六、接下来在myt9容器中创建一个a.jsp文件并在浏览器访问。
1、进入之前与容器挂载的test目录,新建一个WEB-INF文件夹,在WEB-INF文件夹下新建一个web.xml。web.xml的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>test</display-name>
</web-app>
完整的操作过程如下:
2、接着回到test目录,新建a.jsp文件,文件内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
-----------welcome------------
<%="i am in docker tomcat self "%>
<br>
<br>
<% System.out.println("=============docker tomcat self");%>
</body>
完整的操作过程如下:
3、接着重启容器,完整的操作过程如下:
4、最后我们打开宿主机的浏览器,输入正确的路径访问a.jsp文件。
操作成功!
二十七、接着我们安装一个mysql玩玩。
1、先从阿里云上拉取一个5.7版本的mysql镜像到本地,拉取命令如下:
docker pull mysql:5.7
运行结果如下:
2、停止正在运行的容器,操作如下:
3、接着使用命令运行容器,命令如下:
docker run -p 8888:3306 --name mysql -v /gan/mysql/conf:/etc/mysql/conf.d -v /gan/mysql/logs:/logs -v /gan/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
参数说明:
-p 8888:3306:将宿主机的8888端口映射到docker容器的3306端口。
–name mysql:运行服务名字
-v /gan/mysql/conf:/etc/mysql/conf.d :将宿主机/gan/mysql录下的conf/my.cnf 挂载到容器的 /etc/mysql/conf.d
-v /gan/mysql/logs:/logs:将宿主机/gan/mysql目录下的 logs 目录挂载到容器的 /logs。
-v /gan/mysql/data:/var/lib/mysql :将宿主机/gan/mysql目录下的data目录挂载到容器的 /var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
-d mysql:5.7 : 后台程序运行mysql5.7
运行结果如下:
4、进入容器的mysql数据库,完整的操作如下:
5、简单地操作一下数据库,过程如下:
更多推荐
所有评论(0)