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网站注册一个账号在按照上面的操作执行就可以了。
详细的可以参考:
https://blog.csdn.net/w275840140/article/details/80158972