apt-get update,这个命令的作用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。
Docker官方文档参照 https://docs.docker.com
- docker的介绍
在传统的开发当中,基于各种语言开发的产品,如果打成软件包就会五花八门,比如给你一个exe文件,压缩包文件等等…docker的出现解决了这个问题。Docker把所有的软件打成基于docker规则统一格式的包,这个包称为镜像(docker buil)。打包后的所有软件都有镜像,而这些镜像被放在docker仓库里。安装了docker的机器叫做docker主机,主机启动docker,
在客户端(命令行)使用docker命令给主机发命令(如输入 docker build、docker pull、docker run)。镜像仓库(Registry)是用来存镜像的(Images),客户端想要什么软件就去镜像仓库下载什么软件的镜像到Docker_host主机,根据镜像启动容器(containers,每个容器是相互隔绝的,所以搭建一个集群是非常容易的),最终是在容器中运行的。
- Docker_Host:
安装Docker的主机
● Docker Daemon:
运行在Docker主机上的Docker后台进程
● Client:
操作Docker主机的客户端(命令行、UI等)
● Registry:
镜像仓库
Docker Hub
● Images:
镜像,带环境打包好的程序,可以直接启动运行
● Containers:
容器,由镜像启动起来正在运行中的程序
- docker安装(基于Ubuntu)
参考https://docs.docker.com/engine/install/ubuntu/
安装后输入docker --version可以查看版本则表示安装成功
安装后,由于docker仓库服务器在国外,所以可以配置国内的镜像加速器:推荐使用什么云平台就配置哪个云平台的加速器。
阿里云docker镜像加速器及操作链接
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
-
Docker的一些常用命令
-
镜像的获取
在镜像仓库里,搜索想要的镜像名,复制右边的docker pull nginx到命令窗口运行。当使用这个命令时,默认下载nginx镜像的最新版本,等价于docker pull nginx:latest。也可以指定版本号,docker pull nginx:xx.xx.xx
下载来的镜像都存在本地,可以输入 docker images查看下载了哪些镜像文件
使用docker rmi 镜像名删除该镜像。比如 docker rmi redis。注意:如果是 docker rmi redis,它等价于 docker rmi redis:latest。若要删除指定版本,需要带版本号。也可以通过 docker rmi imageid来删除该id对应的镜像。
- 启动容器
有了镜像文件后,通过docker run 启动容器才能运行(docker run 有很多配置选项,可以查阅有哪些配置选项)
Docker run --name=mynginx nginx这个命令代表启动nginx容器,容器名是mynginx。
可以通过docker ps查看当前正在运行的容器
这样启动有一个缺点是不能运行在后台,当shell窗口结束当前运行命令,容器也会结束,所以要使用Docker run --name=mynginx -d nginx。(d表示后台运行)。这里需要注意,虽然mynginx已经停止,可以使用docker ps -a查看所有状态的容器。
如果需要重新运行名为mynginx容器,必须把这个已经存在mynginx容器删除。Docker rm [id,name](docker rm -f删除正在运行的容器)
现在,容器就可以在后台运行了。
输入docker stop [id,name]停止该容器。
停止后想要继续启动输入 docker start [id,name]开启该容器。
docker run --restart=always表示当计算机重启后docker容器也能运行。(开机自启),如果容器一开始启动的时候没有指定restart=always,则需要使用docker update [id,name] restart=always
- 进入容器修改内容
输入docker exec -it 45c195e49359 /bin/bash进入对应id号的docker容器。
45c195e49359 是docker容器的id号,-it表示交互模式,/bin/bash是指进入容器的命令窗口。(注意:有些容器是bash控制台,有些是sh,即/bin/sh)
如上图:进入成功后机器名就变成了容器id,ls一下可以看到上面的内容和Linux系统的文件夹类似。
修改内容完毕后可以输入exit退出docker容器。
-
提交改变
比如你进入容器把nginx的首页内容改变了,你想在把该容器删了后还能继续使用该改变的镜像
docker commit
-
镜像传输(保存)
如果想把镜像文件传送到另一台主机(比如刚刚上面那个命令,把改变后的容器保存为一个镜像),可以先通过docker save命令打包成物理文件(默认打成tar格式)docker save -o [打包名] [镜像名] 如 docker save -o abc.tar longnginx:v1.0
然后可以通过scp远程传输:scp abc.tar long@192.168.126.26:/Downloads
这个时候可以在用户为long的这个机器可以把这个镜像压缩包解压
docker load -i abc.tar 就可以解压了 -
推送远程仓库
上面一种方法是推到指定的机器,共享不是很方便,可以把本地修改后的镜像传到docker hub,这样其他想使用者可以直接从docker hub拉取。
①docker tag local-image:tagname new-repo:tagname 这个是把本地的镜像名改成远程的名字
②docker push 1752957058/longnginx:v1.0 push后面的参数一定要是刚刚修改后的。
输入完毕后回车,此时并不能成功推送,需要你登录到docker hub。使用docker log命名进行登录。推送完镜像后输入docker logout退出。在输入docker push 1752957058/longnginx:v1.0即可推送成功。如下图,则推送成功
③远程登录另一台服务器,通过docker pull 1753851058/longnginx:v1.0拉取我仓库镜像,并运行容器,把主机8848端口映射到容器nginx80端口(通过 -p 8848:80方式将主机8848端口映射到docker容器的80端口),浏览器输入ip就可以访问了.
Docker hub仓库可以看到:
10.docker向本机传文件和本机向docker传文件
docker向本机传文件:
docker cp container_id:docker容器内的文件全路径 本机保存文件的全路径
例如:docker cp 4a2f08d2c1f8:/data1/configure.txt E:\PHP\configure.txt
本机向docker传文件:
docker cp 本机保存文件的全路径 container_id:docker容器内的文件全路径
例如:docker cp E:\PHP\configure.txt 4a2f08d2c1f8:/data1/configure.txt
11.容器挂载
容器挂载是为了解决每一次想要修改容器里的内容都必须进入容器的麻烦问题.还有容器间的数据共享,还有就是比如当你的mysql镜像容器被删除,那所有的数据都会删除,要避免这种情况也可以使用挂在技术,是数据同步到本地文件。解决方式就是启动容器的时候在docker run 加-v.以nginx为例,index.html页面是在/usr/share/html下,启动时输入:
docker run -d --name=nginx -p 88:80 -v /temfile/html:/usr/share/html:ro nginx.这/temfile/html是主机的目录,映射到容器的/usr/share/html,后面的:ro指的是只有本机才能修改内容,容器内不能修改,:rw表示主机和容器都能修改.nginx是镜像名,这里要注意一下,/temfile/html目录下不能为空,一定要有.html页面(因为/usr/share/html下有index.html文件,要做到一一对应),否则会报403.支持一条命令多个挂在 docker rn -v [] -v[] … 如果后面不加权限,则容器里修改会同步到本机,本机修改也会同步到容器。
注意:挂在成功后,停止正在运行的docker容器,在主机映射的目录下进行文件更改,也可以同步到doker容器对应的目录。即可以双向操作