赞
踩
docker安装包的官方地址:
https://docs.docker-cn.com/docker-for-mac/install/#install-and-run-docker-for-mac
这个地方是修改docker的镜像地址:
https://cr.console.aliyun.com/cn-hangzhou/mirrors
docker的文档:
https://github.com/guoshijiang/docker-virtual-technology/tree/master/chapterThree
安装完成后,
检查Docker Engine,Docker Compose和Docker Machine的版本
如果你的docker,docker-compose和docker-machine是能与Docker.app兼容的最新版本,那么你就可以运行下面这些
- 1deMacBook-Pro:etc a1$ docker --version
- Docker version 17.03.1-ce-rc1, build 3476dbf
- 1deMacBook-Pro:etc a1$ docker-compose --version
- docker-compose version 1.11.2, build dfed245
- 1deMacBook-Pro:etc a1$ docker-machine --version
- docker-machine version 0.10.0, build 76ed2a6
- 1deMacBook-Pro:etc a1$ docker run hello-world
2.2. 浏览应用程序和运行一个案列
docker run -d -p 80:80 --name webserver nginx

如果本地没有找到这个镜像,那么Docker将会去Docker Hub中拉取镜像。
注意:早期的Beta发布版本使用docker做为主机名来创建URL,现在端口号被暴露在虚拟机的私有IP地址并且在没有主机名字设置的情况下传递给主机,也可以看Beta9的发布注意点。
docker ps查看web服务器容器的详细信息。停止或者移除容器和镜像
nginx web服务器在你停止或者移除容器之前会持续运行着,如果你想停止web服务器:docker stop webserver,启动服务器用命令docker start webserver。查看一个容器是否停止了用命令docker ps; docker ps -a查看终止状态的容器。使用docker rm -f webserver命令来移除正在运行的容器。这个命令会移除容器,但不能移除nginx镜像。你可以使用docker list命令来列出本地镜像。你可能会保存一些镜像在本地以致于你不用再次去Docker Hub中拉镜像。想要移除一个长期不需要的镜像,使用docker rmi后加ID号和镜像名字。例如,docker rmi ngix。
命令总结:
docker ps 查看正在运行的容器
docker stop停止正在运行的容器
docker start启动容器
docker ps -a查看终止状态的容器
docker rm -f webserver命令来移除正在运行的容器
docker images ls(docker image ls)可以列出所有镜像
docker rmi 删除的镜像
docker --version | docker version | docker info 显示docker的版本或者信息
docker run hello-world 运行docker镜像
docker image ls 列出docker镜像
docker container ls | docker container ls -all | docker container ls -a -q 列出docker容器(-all参数,-a -q参数)
docker container ls --all 列出容器(通过那个镜像产生的容器),如果镜像一直运行着,那么你不可以使用-- all选项:
- guosjdeMacBook:~ guo$ docker container ls --all
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- c58dec734321 hello-world "/hello" 11 minutes ago Exited (0) 11 minutes ago hungry_nightingale
- c3bcd1d52eb1 hello-world "/hello" 11 minutes ago Exited (0) 11 minutes ago quirky_clarke
- 3cb3f43adae6 hello-world "/hello" 11 minutes ago Exited (0) 11 minutes ago gifted_montalcini
- d362e8fe6bdb kaixhin/theano "/bin/bash" 2 months ago Exited (255) 2 months ago cranky_snyder
- 3b77a144a920 registry.cn-hangzhou.aliyuncs.com/denverdino/tensorflow "/bin/bash" 2 months ago Exited (255) 2 months ago 6006/tcp, 8888/tcp dreamy_perlman
- guosjdeMacBook:~ guo$
docker run --name 容器的名字 -d 镜像的名字
-d 表示的是detached,意味着执行完这句命令后控制台将不会被阻碍,可以继续输入命令操作。
2)获取正在运行的容器列表
docker ps
docker ps 当前运行的容器,
docker ps -l 显示最近创建的容器
docker ps -n:显示最近n个创建的容器
docker ps -q:静默模式,只显示容器编号
docker ps --no-trunc:不截断输出
docker ps -a:列出当前所有正在运行的容器+历史上运行过的
3)停止和启动容器
docker start/stop 容器名字/id
4)端口映射
需要将容器中运行的软件的端口映射到主机的端口,否则局域网内的主机是不能够访问的。
options说明(常用):有些是一个减号,有些是两个减号。
--name “容器新名字”:为容器指定一个名称;
-d:后台运行容器,并返回容器id,也即启动守护式容器;
-i:以交互模式运行容器,通常与-t同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
-P:随机端口映射;
-p:指定端口映射,有一下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
docker run -it 9f38484d220f(镜像id)
docker run -it --name mycentos01p
docker run -d -p 6378:6379 --name myRedis redis
1、docker run -it -p 8888:8080 tomcat
2、docker run -it -P tomcat (不指定端口号,随机生成端口号) tomcat
3、docker run -it tomcat 没有向外暴露访问的端口
5)删除容器
docker rm id
docker rm -f $(docker ps -a -q):一次性删除多个容器
6)查看当前容器日志
docker logs name/id
7)登录容器
exec -it 容器名字bash
-i:保证我们的输入有效
-t:会分配一个伪终端
现在使用docker container stop来结束进程,使用CONTAINER ID,如下所示:
docker container stop 1fa4ab2cf395
1、docker ps -a 查询容器
2 、docker rm id(容器号id) 先删除容器
3、docker image ls 查询镜像ID
4、docker rmi id(镜像id)
注意点:
docker commit 提交容器副本使之成为一个新的镜像
docker commit -a='wangbin' -m='wangbin' 容器id bin/tomcat:1.1
docker commit -a='作者' -m='提交的描述信息' 运行的容器id 要创建的目标镜像名:标签名
docker logs -f -t --tail 容器id
-t是加入时间戳
-f跟随最新的日志打印
-tail数字显示最后多少条
docker run -d centos /bin/sh -c "while true;do echo hello wang;sleep 2;done"
查看容器内的进程:docker top 容器号
查看容器内部细节:docker inspect 容器号
exit | ctr+p+q
进入到没有停止到容器:
docker attach 容器号
docker exec -t 容器号 ls -l /tmp
- Username: yanshinian
- Password:
- Error saving credentials: error storing credentials - err: exit status 1, out: `The user name or passphrase you entered is not correct.`
-
参考链接:https://github.com/docker/docker-credential-helpers/issues/65
解决办法:rm /usr/local/bin/docker-credential-osxkeychain
- 解决方案1:
- build的时候这样:
- docker build -t gbruin/bruin-nginx:test .
- 然后用:
- docker push gbruin/bruin-nginx:test
先来看看docker的理念:
1、将运用与运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求希望是持久化的
2、容器之间希望有可能共享数据
docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。为了能保存数据在docker中我们使用卷。
一、数据的持久化
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过union file system 提供一些用于持续或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此docker不会在容器删除时删除起挂载的数据卷
特点:
1、数据卷可在容器之间共享或重用数据
2、卷中的更改可以直接生效
3、数据卷中更改不会包含在镜像的跟新中
4、数据卷的生命周期一直持续到没有容器使用它为止
二、容器间继承+共享数据
查看容器的详细的信息
docker inspect e7b63e23132b(容器号)
数据卷:容器内添加:
1、docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it -v /Users/a1/Download/mydata:/containdata centos
在使用这个命令:docker inspect e7b63e23132b(容器号)

容器停止退出后,主机修改后数据是否同步:同步
命令(带权限):docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名 (ro:readonly)
docker run -it -v /Users/a1/Download/mydata:/containdata:ro centos

dockerFile是什么?
javaEE hello.java ---> hello.class docker images ----->dockerFile
2.1、可在dockerFile中使用VOLUME指令来给镜像添加一个或多个数据卷
VOLUME["/dataVolumeContainer","/dataVolumeContainer2","dataVolumeContainer3"]
说明:由于可移植和分享的考虑,用-v主机目录:容器目录这种方式不能够直接在dockerFile中实现。
由于宿主机目录是依赖于特定主机的,并不能够保证在所有的宿主机上都能存在这样的特定目录。
2.2、File的构建
#volume test
FROM centos
VOLUME["/dataVolumeContainer2","dataVolumeContainer3"]
CMD echo "finished,-------success"
CMD /bin/bash
2.3、构建
命令:docker build -f /Users/a1/Download/DockerFile -t bin/centos .



2.4、数据卷容器:
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器
总体介绍:以上一步新建的镜像bin/centos为模版并运行容器dockerContainer1/dockerContainer2


4.1、dockerFile是什么?
DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
4.2、编写dockerFile的三步骤:
4.3、DockerFile文件构建的解析
DockerFile内容基础知识:
docker执行DockerFile的大致流程:
总结:从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,

4.4、DockerFile体系结构(保留字指令)
1、CMD只有最后一个生效,而entrypoint是追加,都有效
entrypoint:docker run之后的参数会被当作参数传递给entrypoint,之后形成新的命令组合
例如:
1.1创建DockerFile文件
- 例子1:
- FROM centos
- RUN yum install -y curl
- CMD ["curl","-s","http://www.baidu.com"]
-
- 例子2:
- FROM centos
- RUN yum install -y curl
- ENTRYPOINT ["curl","-s","http://www.baidu.com"]
1.2构建
docker build -f /Users/a1/Download/DockerFileBaidu -t baidu .
docker build -f /Users/a1/Download/DockerFileEntrypoint -t entrypoint .
1.3运行结果对比
![]() | ![]() |
- curl命令解释:curl命令可以用来执行下载,发送各种HTTP请求,指定HTTP头部等操作。
- 如果系统没有curl可以使用yum install curl 安装,也可以下载安装。
- curl是将下载文件输出到stdout
- 使用命令:curl http://www.baidu.com执行http://www.baidu.com的html就会显示在屏幕上了
- 这是最简单的使用方式。用这个命令获得了http://curl.haxx.se只想的页面,同样,如果这里的将只是显示文件头部,即html文档的header。要全部显示,请加参数-i.

ONBUILD:
例子:
- 例子1:
- 第一步创建dockerfile文件
- FROM centos
- RUN yum install -y curl
- CMD ["curl","-s","http://www.baidu.com"]
- ONBUILD RUN echo "father is onbuild -----"
- 第二步构建
- docker build -f /Users/a1/Download/DockerFileEntrypoint -t myfather .
-
- 例子2:
- 第一步创建dockerfile文件
- FROM myfather
- RUN yum install -y curl
- ENTRYPOINT ["curl","-s","http://www.baidu.com"]
- 第二步构建
- docker build -f /Users/a1/Download/son -t son .


5.1、编写的dockerfile
- ROM centos
- #这个就是作者和邮箱
- MAINTAINER tomcat<2259924383qq.com>
- #copy是拷贝文件,只是拷贝不能解压缩,这就是和add最大的区别
- COPY text.text /usr/local/copy,text
- #把文件拷贝到usr/local底下并且解压,把java和tomcat加到容器
- ADD jdk-8u211-linux-x64.tar.gz /usr/local/
- ADD apache-tomcat-9.0.19.tar.gz /usr/local/
- #安装vim编译器
- RUN yum install -y vim
- #配置环境变量
- ENV MYPATH /usr/local
- #进入容器到的目录,设置工作访问时候的workdir路径,登陆落脚点
- WORKDIR $MYPATH
- #配置java和tomcat的环境变量
- ENV JAVAHOME /usr/local/jdk1.8.0_211
- ENV TOMCATHOME /usr/local/apache-tomcat-9.0.19
- ENV TOMCATHOME_BASE /usr/local/apache-tomcat-9.0.19
- ENV CLASSPATH $JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jar
- ENV PATH $PATH:$JAVAHOME/bin:$TOMCATHOME/lib:$TOMCATHOME/bin
- #容器运行时暴露的端口号
- EXPOSE 8080
- #启动运行tomcat
- #ENTRYPOINT ["/usr/local/apache-tomcat-9.0.19/bin/startup.sh"]
- #CMD ["/usr/local/apache-tomcat-9.0.19/bin/catalina.sh","run"]
- CMD /usr/local/apache-tomcat-9.0.19/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.19/bin/logs/catalina.out

5.2、构建
docker build -f DockerFile -t mytomcat9 .
5.3、启动(把日志同步到宿主机上)(这个命令一定不能打错了,不然一定起不来) 部署自己的项目在test下面
docker run -d -p 8888:8080 --name mytomcat -v /Users/a1/Download/tomcat9/test:/usr/local/apache-tomcat-9.0.19/webapps/test
-v /Users/a1/Download/tomcat9/tomcat9Logs:/usr/local/apache-tomcat-9.0.19/webapp/logs --privileged=true mytomcat9
总结:

在这个https://cr.console.aliyun.com/cn-hangzhou/instances/repositories网站注册一个账号在按照上面的操作执行就可以了。

详细的可以参考:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。