工具|Docker容器的使用

Docker 是一个开源的应用容器引擎,基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻 量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互 之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低,本文主要介绍docker的常见操作和使用。
一、Docker的安装 【工具|Docker容器的使用】本文介绍的是Mac系统下docker的安装,下载地址:

https://desktop.docker.com/mac/stable/Docker.dmg
安装完成之后右上角出现:
工具|Docker容器的使用
文章图片

选择preferences配置环境代理,这一步的主要目的是为了加快docker资源的下载,防止被墙。如下:
http://docker.mirrors.ustc.edu.cn/
工具|Docker容器的使用
文章图片

二、Docker容器的组成 Docker容器和虚拟机区别:Docker是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚 拟化。与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。组成如下:
工具|Docker容器的使用
文章图片

1、镜像:images
Docker 镜像是用于创建 Docker 容器的模板。 镜像是基于联合文件系统的一种层式结构, 由一系列指令一步一步构建出来。
2、容器:container
容器是独立运行的一个或一组应用。
3、主机:host
一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
4、客户端
Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信。
5、守护进程
是Docker服务器端进程,负责支撑Docker 容器的运行以及镜像的管理。
6、仓库
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub提供了庞大 的镜像集合供使用。用户也可以将自己本地的镜像推送到Docker仓库供其他人下载。
三、Docker镜像的常用命令 1、查看镜像:
docker images
2、搜索镜像:
docker search mysql
搜索MySQL镜像,如果搜索tomcat镜像则为docker search tomcat
3、拉取镜像:
docker pull mysql:7
mysql:7=镜像名称:版本号,版本号不指定则拉取最新的版本号,镜像名称为搜到的镜像列表或者已知的镜像。
4、删除镜像:
docker rmi 8bda8b17626e
字符为镜像名称或者ID,可以简写为前三个字母
5、删除所有镜像:
docker rmi `docker images -q`
慎用该命令
四、Docker容器的常用命令 1、查看正在运行容器:
docker ps
2、查看所有容器:
docker ps -a
3、创建容器:
docker run -i:运行容器-t:-v:映射关系-d:守护式-p:映射端口
4、创建并启动交互容器:
docker run -it --name=mycentos7 centos:7 /bin/hash
name:起别名
centos:7=镜像名称:版本号,如果不写版本号表示最新的
这种启动方式退出容器则停止运行。
5、创建并启动守护式容器
docker run -di --name=mycentos2 centos:7 sh
这种启动方式退出容器则继续运行,需要手动退出,启动之后会返回一个ID,例如:4a19c656a4014b87aaaece24da6acde0aba65f2a6e344a8195a5a166e79da61b。
6、进入容器里面
docker exec -it 4a19c656a4014b87aaaece24da6acde0aba65f2a6e344a8195a5a166e79da61b /bin/sh
4a19c656a40……表示进入这个启动的容器里面。
执行镜像的脚本
Mac:bash /shell/create.sh
linxu:./shell/create.sh
7、删除容器
docker rm mysql
8、删除全部容器
docker rm `docker ps-a-q
9、重启容器
docker restart 名称
10、关闭容器
docker stop 名称
11、查看网络
docker network ls
12、将容器保存为镜像
docker commitxxx
13、将镜像备份为tar文件
docker savexxx.tar
14、根据tar文件恢复为镜像
docker load
五、MySQL容器部署 1、搜索MySQL镜像
docker search mysql
2、拉取MySQL镜像
docker pull mysql
3、映射端口运行镜像,创建容器dockermysql
docker run -di --name=dockermysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
run : 创建并运行
-di :以守护者模式创建
--name=dockermysql:起别名,mysql的别名为dockermysql
-p 3306:3306 :本机端口:容器端口。映射端口,使用-p指定端口映射,客户端和docker之前存在vm虚拟层不能直接访问。
-e MYSQL_ROOT_PASSWORD=root:密码为root
mysql:最后面填的就是镜像的名字,不指定版本默认创建最新的
4、查看运行中的容器
docker ps
5、进入运行中的容器
docker exec -it dockermysql /bin/bash
6、连接数据库,本地登录密码为空,上面设置的远程登录的密码
mysql -u root -p
六、Tomcat容器部署 1、拉取镜像
docker pull toacat
2、创建并启动容器
docker run -d --name=Tomcat -p 9000:8080 -v /Users/xxx/Desktop/Test/tomcat/webapps:/usr/local/tomcat/webapps/ tomcat
格式:-v <要共享的宿主机目录>:<容器目录>
将项目上传到tomcat的webapps目录,创建容器的时候可以知道 -v目录挂载,tomcat在容器中的目录(/usr/local/tomcat/webapps)可以通过外部的浏览器访问,可以指定 -p进行端口映射。本地共享目录为/Users/xxx/Desktop/Test/tomcat/webapps,docker容器目录为/usr/local/tomcat/webapps/。在桌面的Test文件夹tomcat/webapps下新建ROOT文件夹,然后放置一个文件,方便测试。
3、查看容器目录
docker exec -it Tomcat /bin/bash
通过ls命令进入webapps目录发现也有了ROOT目录和刚刚新建的文件。该目录为/usr/local/tomcat/webapps挂载的目录。
4、访问
http://localhost:9000/docker66.txt
工具|Docker容器的使用
文章图片

七、Nginx容器部署 1、拉取nginx镜像
docker pull nginx
2、创建nginx容器并且启动
docker run -di --name=dockernginx -p 80:80 -e MYSQL_ROOT_PASSWORD=root nginx
nginx默认端口为80,在创建的时候需要映射端口,指定-p,映射80
4、访问
http://localhost
八、Docker Compose Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。它是一个定义和运行多容器的 docker应用工具。使用compose,你能通过YMAL文件配置你自己的服务,然后通过一个命令,你能使用配置文件 创建和运行所有的服务。
Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配 置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。
使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器 相互配合来完成某项任务的情况。例如:要部署一个Web项目,除了Web服务容器,往往还需要再加上后端的数据 库服务容器,甚至还包括负载均衡容器等。
1、安装
curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
2、设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
3、查看版本信息
docker-compose -version
4、卸载
rm /usr/local/bin/docker-compose
5、docker-compose.yml文件
模板文件是使用Compose的核心,涉及的指令关键字也比较多,大部分指令与docker run相关参数的含义都是类似的。默认的模板文件名称为docker-compose.yml,格式为YAML格式。 比如一个Compose模板文件:
工具|Docker容器的使用
文章图片

6、启动
启动前最好把docker重启,不然原来的tomcat/mysql/redis容器也是启动状态的话,那么端口会冲突而启动失败。
restart docker
cd /usr/local/mycompose
docker-compose up
如果后台启动则使用如下命令
docker-compose up -d
若要停止
docker-compose stop
八、镜像的导出和导入 在当前的容器中安装了各种组件,期望在其他服务器上也能快速拥有该容器的一切环境,可以将当前的容器制作为一个镜像,再将该奖项复制到其他服务器,其他服务器再基于镜像运行容器。
1、查看镜像列表:
docker ps -a
CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
ec75add5ad04nginx"/docker-entrypoint.…"2 days agoUp 2 days0.0.0.0:80->80/tcpdockernginx
640af4b4ac0ctomcat"catalina.sh run"2 days agoUp 2 days0.0.0.0:9000->8080/tcpdockertomact
deb5078c7e5amysql"docker-entrypoint.s…"2 days agoUp 2 days0.0.0.0:3306->3306/tcp, 33060/tcpdockermysql
34ce3c99f14dhello-world"/hello"2 days agoExited (0) 2 days agoawesome_diracke
2、制作镜像:
docker commit docker dockernginx dockernginx
一个dockernginx表示本机容器名称,第二个dockernginx表示制作的镜像名称
3、查看已经制作的镜像:
docker images
发现多了一个dockernginx
4、备份镜像
docker save -o dockernginx.tar dockernginx
表示把dockernginx镜像压缩为dockernginx.tar,导出到当前环境
5、查看镜像是否运行
docker ps
6、如果已经运行
docker stop deb5078c7e5a(dockernginx的id)
7、如果没有运行则,删除dockernginx
docker ps -a查看id
docker rm docker rm ec7
查看id,删除id为ec7的对象的dockernginx
8、再次查看,发现没有dockernginx了
docker ps -a
9、删除本机镜像
docker images
docker rmi id(对应id)
10、再次查看
docker images
已经被删除
11、导入刚刚生成的dockernginx
docker load -i dockernginx.tar
加载恢复mynginx镜像
12、启动
docker run -di--name=mynginx -p 80:80 dockernginx
在镜像恢复之后,基于该镜像再次创建启动容器
13、查看启动项
docker ps
发现mynginx已经被启动
14、验证
http:localhost:80
九、制作镜像 构建镜像需要用到Dockerfile文本文件,他由一系列命令和参数构成,没有后缀名称,Docker可以读取Dockerfile文件并根据Dockerfile文 件的描述来构建镜像。Dockerfile文件内容一般分为4部分:
  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行的指令
常用的Dockerfile指令如下:

下面制作jdk1.8为例说明:
1、下载jdk8,移动到指定位置。
2、创建Dockerfile文件和jdk8同目录。
FROM java:8//定义了使用哪个镜像构建流程 MAINTAINER name//声明镜像的创建作者 WORKDIR /usr//设置工作目录 RUN mkdir /usr/local/java//docker的核心部分 ADD /jdk-8u202-linux-x64.tar.gz /usr/local/java///将宿主机文件复制到容器内部,如果是压缩文件会自动解压缩 ENV JAVA_HOME /usr/local/java/jdk1.8.0_202//ENV环境变量设置 ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH ENV PATH $JAVA_HOME/bin:$PATH

3、复制:
COPY/jdk-8u202-linux-x64.tar.gz /usr/local/java/
和add类似,如果有压缩文件不能解压缩
4、执行
RUN unzip ./xxx.zip -d xxx
执行shell命令
5、执行构建命令
docker build -t='jdk1.8' .
注意后面有个点,执行效果如下图:

6、查看镜像是否建立完整
docker images
7、创建并启动容器
docker run -it --name=testjdk jdk1.8 /bin/bash
执行之后会自动切换到usr目录,如下图:

8、在容器中测试jdk是否已经安装
java -version
如上图!


    推荐阅读