Docker是一个开源的容器引擎,Docker可以将应用和基础设置的环境隔离。使用Docker可以方便我们更快的打包、测试和部署应用程序。同时可以缩短从编写到部署运行项目的周期时间。简单说就是为开发者提供一个更便捷的运行代码的环境。
对于上面的一张图,主要就是Docker的结构,下面我们来大致介绍一下相应模块的作用。
Docker守护进程(Docker daemon)
Docker daemon是一个运行在宿主机(DOCKER-HOSRT)的后台进程,可以通过Docker客户端与之通信。
镜像(Image)
Docker的镜像是一个只读的模版,它包含创建的Docker容器的说明,它和系统的安装光盘有点相似。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器(Container)
容器,容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
仓库(Repository)
仓库,其实就是Docker的远程仓库,我们可以在上面搜索下载一些软件到我们的本地images。简单理解就是远程的images。
我们可以通过两种方式查找在远程的镜像上是否存在我们需要的镜像。
方式一:
https://hub.docker.com/ 直接点击docker hub网站去查找
方式二:
docker search 镜像名字
#举例
docker search java
docker search nginx
Docker的安装非常简单,这里我们就不做过多的解释了,都是可视化操作。大家可以参考下面的文档进行。
Mac:https://docs.docker.com/docker-for-mac/install/#install-and-run-docker-for-mac
Windows:https://docs.docker.com/docker-for-windows/install/#install-docker-for-windows
linux的话,官网有不同版本的安装的教程,这里放上ubuntu的安装教程,其他小伙们自行查看。
ubuntu:https://docs.docker.com/engine/installation/linux/ubuntu/#install-docker
1--配加速器
因为有的时候因为特殊原因,Docker下载镜像文件会比较慢,这里我们可以使用一下加速器。笔者只介绍使用阿里云的加速器。配置完加速器记得重启一下Dcoker才会生效。
注册阿里云开发账户(免费的)后,访问这个链接就可以看到加速器地址: https://cr.console.aliyun.com/#/accelerator
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2--使用Docker配置
方法很简单,可以把Repository上的java拉到本地images。
docker pull java:8 #拉取java8
docker pull mysql #拉取mysql
我们可以通过下面的命令查看本地的images
docker image ls # 查看本地所有镜像
docker images # 查看docker镜像
结果如下
3--新建并使用容器
我们使用docker run 命令来启动一个容器。当然run方法的参数很多这里我们就不一一介绍了。
docker run -d -p 91:80 nginx #这样就能启动一个nginx的容器。
这里需要说明的
查看正在运行的容器
docker ps #列出正在运行的容器(如果创建容器中没有进程正在运行,容器就会立即停止)
docker ps -a # 列出所有运行过的容器记录
从截图我们可以看到随机分配的端口为32768
关闭或者重启容器
#关闭运行的docker
docker stop CONTAINER ID或者NAMES
#重新启动
docker start CONTAINER ID或者NAMES
查看某一个容器的详细信息
docker inspect 67bb9e7c255b #数字为容器id
【拓展知识点】4--上面我们启动了一个mysql的容器,但是我们还需要启动里面的mysql服务。
docker exec -it CONTAINER_ID bash
进入容器终端并且的保留为容器终端的输入形式(-it和bash的结合作用)
docker run --name mysql01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
#进入容器
docker exec -ti 7c018652b4f9 /bin/bash
#登录mysql
mysql -u root -p
#修改root 可以通过任何客户端连接
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
这样我们就可以在外面连接上我们的mysql了。
我们以可执行jar包为例。
1--将jar包放在/app/eureka目录下,在jar包所在目录创建名为Dockerfile的文件
2--在Dockerfile文件中添加如下内容(不同的应用部署文件里面的内容也是不一样的)
#基于哪个镜像
From java:8
#将本地文件夹挂在到当前的容器
VOLUME/tmp
#复制文件到容器
ADD 我们的要执行的jar /app.jar
#声明需要暴露的接口
EXPOSE 8761
#配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","/app.jar"]
3--使用docker build命令构建镜像
docker build -t 要执行的jar包名字:0.01
#格式 docker build -t 镜像的名称:标签
4--启动镜像,加-d可以表示后台运行
docker run -p 8761:8761 镜像的名称:标签
5--访问
http://Docker宿主机ip:8761/ 就可以显示刚才加载的了。
1--杀死所有正在运行的容器
docker kill $(docker ps -a -q)
2--删除所有已经停止的容器
docker rm $(docker ps -a -q)
3--删除所有镜像
docker rmi $(docker images -q)
4--关闭容器
docker stop CONTAINER ID或者NAMES
5--重新启动关闭的容器
docker start CONTAINER ID或者NAMES
6--移除本地容器
docker rm CONTAINER ID或者NAMES
7--查看本地容器
docker ps //查看正在运行的容器
docker ps -a //查看所有容器
8--查看本地镜像
docker images
9--创建镜像
docker build -t name:tag Dockerfile路径
10--修改本地镜像标记
docker tag IMAGE ID name:tag
docker rmi name:tag
11--删除本地镜像
docker rmi name:tag或者IMAGE ID
12--进入容器
docker exec -it IMAGE ID或者NAMES /bin/bash