docker是什么
Docker:是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的,可移植的,自给自足的容器。
Docker的核心概念:镜像、仓库、容器
Docker镜像:是一个特殊的文件系统,提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
Docker 容器(Container):来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
仓库(Repository):是集中存放镜像文件的场所
一次完整docker的操作流程
- 一般的流程中,client发pull命令从仓库把image拉到docker host,然后通过run命令指挥image到host上面弄一个container来跑这个image。
- 当然也可以是相反的流程,client 通过build命令在host上面创建一个自己的image,然后通过push命令把image推到仓库。之后这个image可以被别的人或者自己pull。
检查电脑环境
检查版本,为了运行docker,你的机器必须是windows7或以上的64bit系统。
另外,你的机器必须支持硬件虚拟化技术(Hardware Virtualization Technology)并且已被启用。对于windows10系统来说,你可以在 任务管理器->性能 中查看到你的电脑是否开启了虚拟化
怎么开启虚拟化,因为电脑型号不一样,所以每台电脑进入BOIS的方式不一样,重启电脑,我的电脑是Lenovo的ThinkPad,所以我按的是F1,进入BOIS页面,找到Security,把Security下面的Virtualization里面的Intel(R) Virtualization Technology的状态改为Enable
然后再重启就好了。
下载dockerToolboxhttps://get.daocloud.io/toolbox/,下载新版本
全部next就可以了
安装完成
安转成功之后桌面会多三个图标
如果安装完成之后桌面少了一个Oracle VM VirtualBox 的话,找到你的dockertoolbox
安装目录下面的installers下面的virtualbox,双击virtualbox.msi进行安装。
双击Docker Quickstart Terminal图标,启动一个终端,第一次运行会比较就,一般会报下载对应的镜像iso到对C:下的docker路径的错误,把dockertoolbox下的boot2docker.iso复制放到你docker运行下载镜像的位置,再重新启动就可以了。
启动成功会出现这样的界面
1.安装docker
yum install docker.x86_64
2. 启动Docker
service docker start
ls -a(同时列出隐含文件), -l(输出一个比较完整的格式,除每个文件名外,增加显示文件
类型、权限、硬链接数、所有者名、组名、大小(byte)、及时间信息-----简化为 ll)
mkdir 新建目录 例:mkdir test 命令会在当前目录下建立一个名为“test”的新目录
touch 创建文件 例:touch test/readme.txt 在 test 目录下创建 readme.txt文件
cd 切换目录 cd /. 到根目录 cd .. 上一级目录 cd /hahaha/hahaha 到指定目录
pwd 显示当前目录
mv 移动/重命名(加上 -i 参数询问是否覆盖) mv hello rock/ 移动到rock目录下
mv hello rock 重命名为rock
cp 拷贝 (加上 -i 参数询问是否覆盖,-r 参数递归调用)
cp -ir test/ workspace"(递归复制 test 目录到 workpace 目录下并在覆盖时提示)
rm 删除 (加上 -i 参数确认提示,-r 参数递归调用)
rm -ir test/ 递归删除test目录及其子目录并询问
wget url 下载文件到当前目录
sudo 暂时获取超级用户权限(有默认时长)加上 -i 参数 没有时间限制,输入 exit或logout 退出
su 账户名 切换到某某用户模式,没有时间限制
ZIP 工具:
压缩文件 zip target.zip filename
压缩文件夹 zip -r target.zip dir -r 参数表示递归压缩子目录
解压 unzip target.zip
tar 工具:
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用
其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
下面的参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名
例:tar -xvf file.tar //解压 tar包
tar -xzvf jdk-8u131-linux-x64.tar.gz -C /usr/local/java //解压jdk到指定文件夹
tar -cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用
compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
vim 编辑器: vim test.cpp
vim 有两种模式,一种是普通模式,另一种是插入模式。执行上述命令以后进入普通模式。
按下字母键“i”进入插入模式,使用方向键移动光标到需要插入的位置,然后输入想要插入
的内容。编辑完成后按键“Esc”退出回到普通模式,在普通模式下输入冒号“:”,然后输入
w 回车,保存更改。接着输入“:q”退出。也可以直接输入“:wq”保存并退出(注意 w 一定要
在 q之前,先保存再退出)。
查找:在普通模式下输入“/查找内容”,回车,即可定位到第一个匹配项。接着按下字母
键“n”可以查找下一个。
撤销:普通模式下输入“:u”并回车,实现撤销
docker search(-s) nginx 搜索相关镜像 加上-s 参数 选出至少start数范围的镜像
docker push 192.168.0.100:5000/ubuntu 推送镜像库到私有源
docker rmi(-f) 镜像名:版本号/镜像ID 删除镜像 (加上 -f 参数 强制删除)
docker rmi $(docker images -q) 删除所有镜像
docker save docker.io/tomcat:7.0.77-jre7 >/root/mytomcat7.tar.gz 导出镜像
docker load < /root/mytomcat7.tar.gz 导入镜像
如果你想要去查看一个镜像的运行效果,你需要先下载一个镜像,直接运行命令docker pull 镜像名
$ docker pull nginx
下载成功之后,运行docker images查看已经下好的镜像
$ docker images
使用docker run 直接运行镜像
$ docker run
-d 是容器在后天运行
-p 是暴漏出来的端口号
docker容器常用命令
docker ps 查看当前正在运行的容器
docker inspect name/image[name/image...] 查看详细
docker ps -a 查看所有容器的状态
docker start/stop(-t) id/name[name...] 启动/停止某个(多个)容器 -t 指定时间
docker kill (-s) name[name...] 强制中断 -s指定SIGINT信号类型,默认“kill”
docker restart (-t) name[name...] 重启 -t 指定时间
docker pause name 暂停 docker unpause name 继续
docker rm(-$) name[name...] 移除
-f --force=false 强制移除运行中容器
-l --link=false 移除指定链接,保留底层容器
-v --volumes=false 移除容器关联卷
指令指南
容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
镜像仓库 — docker [login|pull|push|search]
本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
其他命令 — docker [info|version]
Docker与微服务-使用Maven插件构建Docker镜像(可以参照)
打开我们的项目,在我们项目的src/main下面新建一个docker文件,在docker文件里面新建Dockerfile文本
FROM java:8 #From是from那个镜像,最好现在docker里面pull下来,不然构建的时候会在再下一遍
VOLUME /tmp #指定挂载点,该指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可以共享给其他容器
ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar app.jar #复制文件
RUN bash -c 'touch /app.jar' #run是启动容器后执行的命令
EXPOSE 9000 #声明暴露的端口
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] #entrypoint 和cmd指令的目的一样,都是指定Docker容器启动时执行的命令
Dockerfile文件
修改pom.xml
FROM Jjava:8 //来自那个基础镜像
VOLUME /tmp //指定临时挂载点
ADD microservice-discovery-eur.jar app.jar //把项目jar添加到app.jar里
RUN bash -c 'touch/app.jar' //镜像运行后执行该命令
EXPOSE:9000 //暴露出来访问的端口
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] //运行后执行的命令
在maven的配置文件里面增加配置
<build>
<plugins>
<!-- docker的maven插件,官网:https://github.com/spotify/docker-maven-plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.12</version>
<configuration>
<!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 -->
<!-- 详见:https://github.com/spotify/docker-maven-plugin Invalid repository
name ... only [a-z0-9-_.] are allowed -->
<!-- 如果要将docker镜像push到DockerHub上去的话,这边的路径要和repo路径一致 -->
<imageName>eacdy/test</imageName>
<!-- 指定Dockerfile所在的路径 -->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<!-- 以下两行是为了docker push到DockerHub使用的。 -->
<serverId>docker-hub</serverId>
<registryUrl>https://index.docker.io/v1/</registryUrl>
</configuration>
</plugin>
</plugins>
</build>
照上面修改后build之后的项目会报找不到2375端口的错误
需要我们去修改dockerhost的端口
在控制台中输入 docker-machine env
$Env:DOCKER_TLS_VERIFY = "1"
$Env:DOCKER_HOST = "tcp://192.168.99.100:2376"
$Env:DOCKER_CERT_PATH="C:\Users\Administrator\.docker\machine\machines\default(每个人的路径都不一样)
再去修改pom.xml
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.12</version>
<configuration>
<imageName>eacdy/test</imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!-- 解决Connect to localhost:2375的问题的其中一种方式,注意要跟docker-machine env相一致 -->
<dockerHost>https://192.168.99.100:2376</dockerHost>
<dockerCertPath>C:\Users\Administrator\.docker\machine\machines\default</dockerCertPath>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<!-- 以下两行是为了docker push到DockerHub使用的。 -->
<serverId>docker-hub</serverId>
<registryUrl>https://index.docker.io/v1/</registryUrl>
</configuration>
</plugin>
这样build的项目就不会报错了
完美打包构建build项目。