Docker 是一个开源的应用容器引擎,基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻 量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互 之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低,本文主要介绍docker的常见操作和使用。
一、Docker的安装 【工具|Docker容器的使用】本文介绍的是Mac系统下docker的安装,下载地址:
https://desktop.docker.com/mac/stable/Docker.dmg安装完成之后右上角出现:
文章图片
选择preferences配置环境代理,这一步的主要目的是为了加快docker资源的下载,防止被墙。如下:
http://docker.mirrors.ustc.edu.cn/
文章图片
二、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 images2、搜索镜像:
docker search mysql搜索MySQL镜像,如果搜索tomcat镜像则为docker search tomcat
3、拉取镜像:
docker pull mysql:7mysql:7=镜像名称:版本号,版本号不指定则拉取最新的版本号,镜像名称为搜到的镜像列表或者已知的镜像。
4、删除镜像:
docker rmi 8bda8b17626e字符为镜像名称或者ID,可以简写为前三个字母
5、删除所有镜像:
docker rmi `docker images -q`慎用该命令
四、Docker容器的常用命令 1、查看正在运行容器:
docker ps2、查看所有容器:
docker ps -a3、创建容器:
docker run -i:运行容器-t:-v:映射关系-d:守护式-p:映射端口4、创建并启动交互容器:
docker run -it --name=mycentos7 centos:7 /bin/hashname:起别名
centos:7=镜像名称:版本号,如果不写版本号表示最新的
这种启动方式退出容器则停止运行。
5、创建并启动守护式容器
docker run -di --name=mycentos2 centos:7 sh这种启动方式退出容器则继续运行,需要手动退出,启动之后会返回一个ID,例如:4a19c656a4014b87aaaece24da6acde0aba65f2a6e344a8195a5a166e79da61b。
6、进入容器里面
docker exec -it 4a19c656a4014b87aaaece24da6acde0aba65f2a6e344a8195a5a166e79da61b /bin/sh4a19c656a40……表示进入这个启动的容器里面。
执行镜像的脚本7、删除容器
Mac:bash /shell/create.sh
linxu:./shell/create.sh
docker rm mysql8、删除全部容器
docker rm `docker ps-a-q9、重启容器
docker restart 名称10、关闭容器
docker stop 名称11、查看网络
docker network ls12、将容器保存为镜像
docker commitxxx13、将镜像备份为tar文件
docker savexxx.tar14、根据tar文件恢复为镜像
docker load五、MySQL容器部署 1、搜索MySQL镜像
docker search mysql2、拉取MySQL镜像
docker pull mysql3、映射端口运行镜像,创建容器dockermysql
docker run -di --name=dockermysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysqlrun : 创建并运行
-di :以守护者模式创建
--name=dockermysql:起别名,mysql的别名为dockermysql
-p 3306:3306 :本机端口:容器端口。映射端口,使用-p指定端口映射,客户端和docker之前存在vm虚拟层不能直接访问。
-e MYSQL_ROOT_PASSWORD=root:密码为root
mysql:最后面填的就是镜像的名字,不指定版本默认创建最新的
4、查看运行中的容器
docker ps5、进入运行中的容器
docker exec -it dockermysql /bin/bash6、连接数据库,本地登录密码为空,上面设置的远程登录的密码
mysql -u root -p六、Tomcat容器部署 1、拉取镜像
docker pull toacat2、创建并启动容器
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
文章图片
七、Nginx容器部署 1、拉取nginx镜像
docker pull nginx2、创建nginx容器并且启动
docker run -di --name=dockernginx -p 80:80 -e MYSQL_ROOT_PASSWORD=root nginxnginx默认端口为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-compose2、设置文件可执行权限
chmod +x /usr/local/bin/docker-compose3、查看版本信息
docker-compose -version4、卸载
rm /usr/local/bin/docker-compose5、docker-compose.yml文件
模板文件是使用Compose的核心,涉及的指令关键字也比较多,大部分指令与docker run相关参数的含义都是类似的。默认的模板文件名称为docker-compose.yml,格式为YAML格式。 比如一个Compose模板文件:
文章图片
6、启动
启动前最好把docker重启,不然原来的tomcat/mysql/redis容器也是启动状态的话,那么端口会冲突而启动失败。
restart docker如果后台启动则使用如下命令
cd /usr/local/mycompose
docker-compose up
docker-compose up -d若要停止
docker-compose stop八、镜像的导出和导入 在当前的容器中安装了各种组件,期望在其他服务器上也能快速拥有该容器的一切环境,可以将当前的容器制作为一个镜像,再将该奖项复制到其他服务器,其他服务器再基于镜像运行容器。
1、查看镜像列表:
docker ps -aCONTAINER 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 ps6、如果已经运行
docker stop deb5078c7e5a(dockernginx的id)7、如果没有运行则,删除dockernginx
docker ps -a查看id查看id,删除id为ec7的对象的dockernginx
docker rm docker rm ec7
8、再次查看,发现没有dockernginx了
docker ps -a9、删除本机镜像
docker images10、再次查看
docker rmi id(对应id)
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部分:
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行的指令
下面制作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 images7、创建并启动容器
docker run -it --name=testjdk jdk1.8 /bin/bash执行之后会自动切换到usr目录,如下图:
8、在容器中测试jdk是否已经安装
java -version如上图!
推荐阅读
- docker|docker入门——简介
- docker专栏|docker(四)—容器的基本使用
- 系统优化|流量监控--nload工具详解
- 系统优化|内存查看--Free命令详解
- Linux/Unix中的Wget命令用法介绍和示例
- python|【自动测试不求人】python自动化测试对excel操作xlrd和xlwt库应用
- Linux 练习
- 什么是终端、控制台、Shell程序和内核()
- ubuntu|Linux下(ubuntu版本14045)安装编译bluez5.19