docker安装和使用

image

docker是什么

Docker:是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的,可移植的,自给自足的容器。
image
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在windows上的安装
检查电脑环境
检查版本,为了运行docker,你的机器必须是windows7或以上的64bit系统。

image

另外,你的机器必须支持硬件虚拟化技术(Hardware Virtualization Technology)并且已被启用。对于windows10系统来说,你可以在 任务管理器->性能 中查看到你的电脑是否开启了虚拟化

image

image

怎么开启虚拟化,因为电脑型号不一样,所以每台电脑进入BOIS的方式不一样,重启电脑,我的电脑是Lenovo的ThinkPad,所以我按的是F1,进入BOIS页面,找到Security,把Security下面的Virtualization里面的Intel(R) Virtualization Technology的状态改为Enable

image

然后再重启就好了。

下载dockerToolbox
https://get.daocloud.io/toolbox/,下载新版本

全部next就可以了

安转成功之后桌面会多三个图标

image

如果安装完成之后桌面少了一个Oracle VM VirtualBox 的话,找到你的dockertoolbox
安装目录下面的installers下面的virtualbox,双击virtualbox.msi进行安装。

双击Docker Quickstart Terminal图标,启动一个终端,第一次运行会比较就,一般会报下载对应的镜像iso到对C:下的docker路径的错误,把dockertoolbox下的boot2docker.iso复制放到你docker运行下载镜像的位置,再重新启动就可以了。

启动成功会出现这样的界面

image

docker在linux上的安装

1.安装docker
yum install docker.x86_64

  1. 启动Docker
    service docker start

    linux常用命令

     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    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常用命令

1
2
3
4
5
6
7
8
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 镜像名

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 移除容器关联卷

指令指南

1
2
3
4
5
容器生命周期管理 — 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]

使用dockerfile制作镜像

Docker与微服务-使用Maven插件构建Docker镜像(可以参照http://blog.csdn.net/qq_22841811/article/details/67369530)

打开我们的项目,在我们项目的src/main下面新建一个docker文件,在docker文件里面新建Dockerfile文本

FROM java:8 #From是from那个镜像,最好现在docker里面pull下来,不然构建的时候会在再下一遍

VOLUME /tmp #指定挂载点,该指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可以共享给其他容器

1
2
3
4
5
6
7
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"]

Dockerfile文件

修改pom.xml

1
2
3
4
5
6
7
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的配置文件里面增加配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<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的端口

1
2
3
4
5
6
7
在控制台中输入 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<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的项目就不会报错了

image

完美打包构建build项目。

-------------本文结束感谢您的阅读-------------
wusha wechat
欢迎您扫一扫上面的微信二维码,加我的微信!
坚持原创技术分享,您的支持将鼓励我继续创作!