赞
踩
首先,Docker是容器,与虚拟机有很大区别。
虚拟机需要独立的操作系统,占用预先设置好的硬件资源,占用空间庞大。docker作为一个容器,它会与宿主机共享操作系统、共享硬件资源,可以理解它是一个与外界隔离的一个文件夹。里面仅有这个容器服务所运行具备的资源文件。(以上个人理解,如有问题还望大佬指正)
https://docs.docker.com/engine/install/ 可以在官网找到自己对应的操作系统来根据文档进行安装,因为笔者做运维所以在centos7下进行安装
1、卸载旧版本docker(如未安装过则不需要此步骤)
旧版本的 Docker 被称为docker
或docker-engine
。如果安装了这些,请卸载它们以及相关的依赖项。
- $ sudo yum remove docker \
- docker-client \
- docker-client-latest \
- docker-common \
- docker-latest \
- docker-latest-logrotate \
- docker-logrotate \
- docker-engine
2、安装yum仓库管理工具并新增docker的repo仓库
- $ sudo yum install -y yum-utils
- $ sudo yum-config-manager \
- --add-repo \
- https://download.docker.com/linux/centos/docker-ce.repo
3、安装docker-ce
$ sudo yum install docker-ce docker-ce-cli containerd.io
以上docker安装完毕
1、启动docker
$ sudo systemctl start docker
2、运行hello-wordl 容器
$ docker run hello-world
下图红框部分即hello-world 容器所提供的服务。什么服务?其实就是打印了这段话而已啦。hello-world是一个测试image,其意义就在于检测你的docker是否可以正常运行。
Ps.
1)hello-word是什么?它是docker提供一个测试镜像文件。
2)在输入docker run hello-world后docker为我们做了什么?
docker首先会检测本地是否有hello-world镜像文件,如果有则直接将其放入容器中运行,如果没有呢?当然是会去下载啦,读者可以在运行hello-world之前输入命令"docker images"来查看本地已存在的镜像文件,发现是空的,但是在docker run hello-world后再次输入docker images,会发现多出来一个hello-world镜像文件,这个文件就是刚刚docker为我们下载的。有了文件之后自然就是讲image放到容器中去运行啦,基本来说,你能想到的服务器上的服务基本都有对应的容器、比如nginx、tomcat等等。
3、那么如果我们不想在运行的时候去下载、更不想让他下载一些最新版本的镜像文件,我就想自己单独下载然后在本地运行怎么办?接下来我们讲如何下载镜像
pull、pull、pull就是拉的意思也是docker中用于将镜像文件下载的重要选项。
docker完整下载镜像命令如下
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
举个栗子:我们下载一个tomcat镜像试试,输入完docker pull tomcat后发现已经开始下载
Q: 大家会不会有个疑问,明明上面的完整命令那么长,为什么你只输入了"docker pull tomcat"就能下载呢?好先来解答这个问题
A:是这样的,必要的参数其实就是一个就是image名字,如果没有其他参数,docker会使用默认配置进行拉取。上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub (docker.io
)获取镜像,而镜像名称是 tomcat
,因此将会获取官方镜像 library/tomcat
仓库中最新的也就是latest标签的镜像进行下载,一般情况下除非是自行搭建docker私有仓库,否则不用理会仓库地址,谁让docker hub 社区那么活跃呢
- docker pull tomcat:8.5.69-jdk8-adoptopenjdk-openj9
- 下载标签为8.5.69-jdk8-adoptopenjdk-openj9的官方tomcat镜像
-
- docker pull bitnami/tomcat:8.5-debian-10
- 下载bitnami仓库下标签为8.5-debian-10的tomcat的镜像
-
- docker pull 192.168.1.161:5000/httpd:3.3.4
- 在192.168.1.161机器的5000端口上 下载标签为3.3.4的httpd镜像
-
- 以上例子大家应该都能看明白
- docker run 镜像名字 即可运行
- 常用选项
- -t 让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
- -i 让容器的标准输入保持打开
- -d: 后台运行容器,并返回容器ID
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -v: 绑定一个卷
-
- docker ps -a #此命令可查看所有状态中的容器
-
- docker stop containerID #可以停止一个指定容器ID的容器
-
- docker start containerID #可以启动一个处于stop状态的容器
1、tomcat测试
可以看到上图中运行了一个tomcat容器。并且端口映射为5000端口,如果不进行映射是无法提供服务的。 然后访问本机ip:5000端口
在这里要说一下,tomcat的官方docker镜像由于没有webapp目录,所以返回404是正常的。
2、nginx的资源目录挂载测试
- 1、docker pull nginx #下载官方最新的nginx镜像
-
- 2、来到usr/local/src/html下,echo "<h1>123</h1>" > index.html 新增一个测试主页
-
- 3、docker run -p 8008:80 -v /usr/local/src/html:/usr/share/nginx/html -d nginx ##此处使用-v进行目录的挂载,相当于nginx的静态资源目录被挂载到了宿主机的/usr/local/src/html下面
-
- 4、使用elinks测试 elinks http://127.0.0.1:8008 可以正常看到我写的123页面
3、关于容器日志
- docker container logscontainerID #可以查看指定ID开头容器的日志
- 下面可以看出 nginx的访问日志
有时候我们需要进到容器里面进行操作,那么就需要用到下面的命令
- docker exec -it containerID /bin/bash #进入指定容器ID的容器中
-
我们可以查看目前本地所以已经下载的镜像文件
- docker images #查看本地所有镜像
-
- docker image rm hello-word #删除hello-world镜像
- PS 删除镜像前一定要保证没有任何容器在使用此镜像,否则报错无法删除(conflict: unable to remove repository reference "hello-world" (must force) - container 06f5a7072d40 is using its referenced image d1165f221234)
好了 以上是笔者边学习边摸索的一些经验,希望大家多多指正。谢谢
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。