Docker使用快速入门

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 info:查看一些信息;
  • docker version:查看版本信息;
  • docker run 镜像名:运行一个镜像产生一个容器,若本地没有这个镜像则去远程仓库下载后再运行;

镜像操作

远程仓库

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包,传到服务器上。

  1. 在服务器上创建一个文件夹,比如叫做context;

  2. jar包放进这个文件夹内,同时创建一个文件Dockerfile

  3. 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覆盖)
    
  4. wq保存退出,执行指令docker build -t demo:01 .

相关文章

Docker是什么Docker是 Docker.Inc 公司开源的一个基于 LXC技...
本文为原创,原始地址为:http://www.cnblogs.com/fengzheng...
镜像操作列出镜像:$ sudo docker imagesREPOSITORY TAG IMA...
本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p...
在 Docker 中,如果你修改了一个容器的内容并希望将这些更改...
在Docker中,--privileged 参数给予容器内的进程几乎相同的权...