Docker
文章目录
基本操作
安装
这里使用官方的脚本安装,对于所有类Linux系统均可按一下方式安装。
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
服务的启动、关闭、重启、状态
systemctl start docker #启动
systemctl stop docker #关闭
systemctl restart docker #重启
systemctl status docker #查看状态
基础指令
镜像操作
远程仓库
docker里将镜像成为image,它的含义就是一个个软件安装包,比如有MysqL的镜像,有Nginx的镜像,有tomcat的镜像等等……
那么我们去哪里找这些镜像呢?
类似maven,docker也有一个中央仓库,百度一下docker hub就行,进去直接搜你想要的的软件,注意最好pull官方提供的。
配置加速
阿里云为每一位用户都提供了免费的加速服务。
登录阿里云账号,选择产品与服务,容器镜像服务,镜像加速器,按照给定的步骤配置即可。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://******.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
重启完成之后我们在docker info
一下可以发现镜像地址已经变成阿里云的了。
镜像基操
docker images
:查看本地所有镜像;docker pull 镜像名:版本号
:从中央仓库下载镜像;docker search 镜像名
:搜索镜像;docker image rm 镜像名(:版本号)
:删除镜像,如果有容器依附于此镜像,则无法正常删除。其简写为docker rmi 镜像名(:版本号)
;docker image rm -f 镜像名(:版本号)
:强制删除,连同镜像及其容器一并删除;
容器操作
容器基操
docker run 镜像名:版本号
:根据镜像生产一个容器;docker ps
:查看正在运行的容器;docker stop 容器ID
:关闭容器;docker start 容器ID
:启动容器;docker restart 容器ID
:重启容器;docker rm 容器ID
:删除容器;docker top 容器名或ID
:查看容器内进程;
端口映射
假设我起了一个tomcat容器,他的端口是8080,但是我是无法访问到他的,必须将容器端口映射到宿主机的某一个端口之后才能访问到;
docker run -p 8080(宿主机端口):8080(容器端口) -d(后台运行) tomcat:8.0
注意我们只需让宿主机端口不冲突即可,不同容器间的端口号是可以相同的,因为他们是隔离的。
这里顺便补充一个知识点,我们是可以给容器取名字的,只需要再加上参数--name 名字
即可。
查看日志
docker logs 容器名称或ID
如果需要实时监听日志,加上参数-f
;
如果需要加入时间戳,加上参数-t
;
进入容器内部
docker exec -it 容器ID bash
容器相当于一个小的linux系统,我们进入后可以使用一些简单的指令如ls、cd等,但是复杂一点的指令如vim、vi、ll等是不能用的。
退出容器:exit
;
我们如何将文件传到这个小系统里面呢?比如我打包好了war包,现在想要传到容器的webapp里,要怎么做呢?
# 从容器到宿主机
docker cp 容器标志(ID或name):容器内路径 宿主机路径
# 从宿主机到容器
docker cp 宿主机路径 容器标志(ID或name):容器内路径
查看容器内部具体信息:
docker inspect 容器标志
数据卷
docker允许将容器中某一文件夹挂载到宿主机中,即共享文件夹:
docker run -d -p 8000:8080 --name tomcat8000 -v /DockerData/tomcat8000/webapps/:/usr/local/tomcat/webapps tomcat:8.0
这样挂载的话,第一次会将宿主机目录内容同步到容器目录内。也就是说如果宿主机目录是空的,那么相应容器目录也就被清空了。
可不可以第一次挂载时是容器目录内容同步到宿主机目录呢?
是可以的,我们这样挂载:
docker run -d -p 8000:8080 --name tomcat8000 -v tomcat-webapps:/usr/local/tomcat/webapps tomcat:8.0
这个tomcat-apps相当于给数据卷取了一个名字,而目录是docker自动生成的。
要想找到这个目录,我们可以docker volume inspect tomcat-apps
进行查看。
网络
不同容器之间如何通信?
docker有一个默认网桥bridge,可通过docker network ls
查看。
每个容器都有一个ip,一般是172开头。
但是如果所有容器都通过这个默认网桥进行通信,网桥的压力就太大了。
所以一般都是基于项目自定义网桥,即一个项目中的所有容器使用一个网桥。
自定义网桥
docker network create 网桥名称
创建好自己的网桥之后,如何让容器连接这个网桥呢?
我们需要在生产容器时,即run时多加一个参数--network 网桥名称
即可。
docker会自动将一个网桥内的容器的名称与ip进行映射,即所有写ip的地方都可以用容器名称代替。
Dockerfile
我以发布一个SpringBoot程序的例子来演示如何简单使用Dockerfile。
Dockerfile是用来自己构建一个镜像的。
首先我们肯定得先写好SpringBoot程序,打成jar包,传到服务器上。
-
往
Dockerfile
里面写入如下内容:FROM openjdk:8-jre # FROM表示你的镜像依赖的父镜像 workdir /app # workdir表示工作目录 ADD demo01.jar demo01.jar # ADD表示将jar包添加进镜像环境中 EXPOSE 8080 # 8080暴露 ENTRYPOINT ["java","-jar"] # 启动时执行的命令(不会被覆盖) CMD ["demo01.jar"] # 启动时运行的命令(可被run覆盖)
-
wq保存退出,执行指令
docker build -t demo:01 .
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。