ip代理游戏加速
说明:执行这个命令不需要docker守护进程已经启动,但其它docker命令基本上都需要docker守护进程已经启动。
执行这个命令时,如果docker守护进程没有启动,则只会返回client的信息。server信息不会显示,会提示无法连接到docker daemon
执行该命令,前提需要docker守护进程已经启动。如果一切正常,会返回如下的信息(这里只提供前面一部分)Containers: 1
ubuntu是镜像名,如果本地不存在,回到仓库中下载。/bin/bash 是指定容器创建后立即执行的命令。
在用docker run命令创建时可以通过 --name 名称 来指定,如果不指定,系统会自动产生一个名称。
docker start 3d72d0283dc8 执行后返回容器的ID注意,如果指定的容器已经处于启动状态,上述命令只是返回容器ID,不会重新启动容器。
当重新启动容器时,会沿用创建容器(docker run)命令时指定的参数来运行。如果创建容器时,指定了shell。
这种容器指容器可以长期一直运行,没有交互式会话,非常适合容器中运行后台应用程序和服务(如数据库服务、web服务器等)。
上述语句利用-d标识创建了一个守护式容器,该容器启动了一个shell,循环打印一个信息,保证shell不退出。可以通过
来获取容器的日志 ,还可以通过docker top 命令来查看容器内当前运行的进程信息。六、与守护式容器交互
则会出现一个shell会话(容器内的,不是主机的),这样就可以和容器进行交互了,可以完成自己想要的操作。
上面命令表示在容器内打开一个shell交互式会话,参数 -i -t 是让这个shell能被主机捕捉到,可以在主机上操作该shell。通过这个命令,就可以对容器进行相关的操作了,如进行容器的配置、应用程序的配置等。
在利用docker run创建容器时,可以加上标识 --rm,会在容器运行完毕后,自动删除容器,相当于创建的是一个一次性容器。
如:docker run --rm ....... 这个尤其在练习容器的操作使用时非常使用,省去了留下一堆垃圾容器需要人工清理的工作。
会在容器的对应的镜像上增加一个可写层,镜像部分是只读的。通过 diff命令可以看出改变的信息。如::~$
很多场景下,我们需要从主机将文件拷贝到容器中,或从容器拷贝文件都主机。利用 cp命令即可,语法格式如下:
。实际上无论是 run ,还是create命令,都有大量可选的参数,我们这里只是介绍最基本的使用方式(也就是说使用尽量少的参数)。在实际生产环境中,往往会更加复杂。
每个一个容器除了ID外,都有一个name(可以在创建时指定,也可以不指定,由系统自动分配)。
当容器创建后,也可以通过rename命令给容器重命名。重命名时,容器处于运行或停止状态都允许修改。
只有下载后,镜像才会保存在本地(docker环境所在的主机),通过如下命令可以查看本地已经存在的镜像。
。在远程镜像中心,镜像是保存在仓库(Repository)中,仓库存在镜像中心(Registry)中。
,一个仓库中的镜像通常是同一种类型的镜像,只是不同版本的区别。换句话说,镜像时由仓库名和tag标识来共同决定的。docker hub中有两种类型的镜像:用户仓库(user repository)和顶层仓库(top-level repository)。
,对于顶层的则没有用户名,如果省略tag名,默认为latest.说明:也可以搭建私服的镜像中心,供企业内部使用。
对于dokcer run命令,只指定仓库名,不指定tag时ip代理游戏加速,默认下载的是 latest标识的镜像
在某些场景下,可能需要把一个已有的镜像 加入(也就是复制)到别的仓库中。这时可以用tag命令。具体的语法格式是:
创建镜像有两种方法,一是用commit命令,二是用dockerfile方法(这个更常用,在下面文章介绍)。本章介绍commit方法。
在介绍commit命令前,我们先回顾下对代码的版本控制,当修改代码后,我们会commit变更到版本服务器上。
上面命令在当前用户(xxx)的主目录下创建了一个myweb目录,并在该目录下建立了一个空的文件名为Dockerfile文件。这个目录就是我们的构建环境(或上下文)。
Dockerfile文件中,是一系列的指令组成。每条指令,包括指令名(必须大写)和指令所需的参数
第一条FROM指令的参数用于指定一个已经存在的基础镜像,每个dockerfile文件的第一条指令都是FROM
)2、在上面创建的容器中,执行一条指令,对容器做出修改(一般指令总会对容器进行一些改变,否则该指令就不需要了)
3、执行类似docker commit命令,提交一个新的镜像层(该层的内容就是上面指令造成的变化内容)
看到这里大家可以有个疑问,为何每条指令都要创建镜像和容器呢,而不是只在开始创建一次容器,然后基于该容器执行所有指令,完成所有修改后,再提交生成一个镜像呢?
这正是docker镜像分层特点的优势。可以想象一下,采用这种放的好处是,即使因为某种原因导致某条指令失败,但我们还是可以得到一个可用的镜像,然后我们就可以通过该镜像运行一个容器,在该容器中执行失败的指令,从而方便的进行调试,找到失败原因。
。因为所有新的镜像都会基于该基础镜像基础上变化来的。3、第三行 MAINTAINER指令,是标识镜像的作者和联系方式(这里是电子邮件),以方便镜像使用者和作者联系。
。上面的例子第4行是更新已经安装的APT仓库,第5行是下载安装nginx包,第6行是生成一个html文件,文件中只包含简单的一句线、最后一行EXPOSE指令,告诉docker守护进程,容器的应用将使用指定的端口号(EXPOSE指令的参数,这个例子是80)。
参数-t指定生成镜像的所属用户名和仓库名,也可以有tag标识(这个例子没写,默认为latest)。
命令的最后点 不是结束符,而是表示Dockerfile文件在当前路径下。也可以指定一个git仓库的地址(只要该地址下有Dockerfile),则会利用git仓库中的dockerfile文件来构建镜像。执行的过程会详细 输出每条指令执行的详细信息。构建成功后,我们就可以用
docker images命令查看新构建的镜像,也可以用docker history命令查看新构建镜像的构建历史。
daemon off;上面命令创建和运行了容器,并将nginx服务启动了。上面命令除 -p参数外,其它参数前面文章都介绍过了。-d表示是 容器。 --name指定容器名,这里是myweb。 后面的是镜像名。以及要执行的命令(这里是启动nginx服务)。 -p参数我们下面详细介绍。
这样指定的方式有好有怀,坏处是,第一无法运行多个同样的容器,第二容易与主机上的应用冲突。好处是端口是已知的。需要小心使用。
daemon off;利用大写的-P参数,将dockerfile中EXPOSE指令指定的端口(容器内端口)对本地宿主主机公开,并随机绑定到本地宿主主机的端口上。docker port myweb 80
在docker run命令中通过 -p标记暴露的容器端口,并不一定需要在dockerfile文件中用EXPOSE指令配置
在dockerfile文件中用EXPOSE指令配置端口,其好处是在docker run命令中可以用-P标记来全部暴露,省去了在docker run命令中用-p来逐个指定。
镜像创建好后,很重要的一个操作就是共享和发布。可以将自己创建的镜像发布到docker hub上,也可以发布到自己的私有docker hub上。要想发布镜像到dokcer hub上,首先要在dokcer hub上注册账户,并且在本机(准备提交镜像到docker hub的机器上)上进行注册。具体过程如下:
这里的 用户名/仓库名[:tag名] 代表的镜像必须是本机存在的,tag名不写的话默认就是latest。 也就是说在创建镜像时的命名必须是规范的格式(加用户名)。并且用户名就是自己在docker hub上注册的名称。如这里的jeme.
我们知道,通过docker run 创建并启动一个容器时,命令的最后可以指定容器启动后在容器内立即要执行的指令,如:
docker run ubuntu /bin/ps //表示容器启动后立即运行 /bin/ps命令,显示容器的当前进程。除了这种方式外,我们可以在dockerfile文件中通过CMD指令指定容器启动时要执行的命令。如:
我们仍然可以在docker run命令中带上容器启动时执行的命令,这会覆盖dockerfile中的CMD指令指定的命令
4、CMD命令的参数格式,一般写成 字符串数组的方式,如上面的例子。如:CMD [echo,hello world]
虽然也可写成CMD echo hello word 方式,但这样docker会在指定的命令前加 /bin/sh -c 执行,有时有可能会出问题。 所以推荐采用数据结构的方式来存放命令。
docker 学习笔记20:docker守护进程的配置与启动安装好docker后,需要启动docker守护进程。有多种启动方式。一、服务的方式
因为docker守护进程被安装成服务。所以,可以通过服务的方式启停docker守护进程,包括查看状态。
利用sudo ps -A 可以获取守护进程的进程号三、让远程api可以访问docker守护进程
tcp://0.0.0.0:2375这需要每次都带参数,而且无法通过服务的方式启动。可以通过在配置文件配置,来让服务启动也可以让远程访问生效。
192.168.142.138:2375 info注意:可以采用 sudo docker daemon 方式启动守护进程,然后进行本地的docker命令操作,可以铜鼓日志查看不同命令对应的url在linux下,可以通过curl工具访问url,因为返回的是json串,非格式化的。可以结合python命令,转为格式化的json,让看起来比较清楚。如:
则docker的相关命令(如docker search)或docker容器与网络相关的操作都可以正常进行,不需要特殊设置。
3、当docker主机 是通过代理才能连接外网时,让docker守护进程可连接外网,非服务启动方式
这时执行如 docker search ubuntu 命令时,可以成功。 注意,这并不需要docker主机自己设置代理上网(也就是docker进程没有利用主机设置的代理上网)。但是正常启动的容器,在容器内也无法连接外网。
注意,这并不需要docker主机自己设置代理上网(也就是docker进程没有利用主机设置的代理上网)。
容器本身是一个轻量级的linux系统,我们可以通让主机上网一样设置让其上网。容器上网和让docker守护进程联网没有关系。
一旦设置正确的环境变量http_proxy,容器就可以正常上网了。因为是临时的,shell关闭后,环境变量就没了。
注意:容器设置代理 和 docker主机设置代理以及docker守护进程设置代理无关,也就是容器只会使用自己的代理信息上网。
docker学习笔记:容器的网络设置创建一个docker容器,docker系统会自动为该容器分配一个ip地址,通常是172.17开头。
。假设某个容器(假设容器的名称为myweb)被分配的地址是 172.17.0.2,该容器上启动了一个web服务,其端口号是80(注意这是容器中的端口号)。
这时我们用docker port命令可以查看该web服务在容器的端口对应到主机端口的信息,如:
这样docker主机局域网内的机器就可以通过主机的地址和绑定的ip来访问到docker容器上的服务了。不过这存在的问题是,需要将容器端口与主机上端口的映射关系变成固定的。否则一旦容器重启,绑定端口就会变了。
说明:这么做是可以的,但问题是容器的ip地址是自动分配的,一旦提供该web服务的容器重启后,其ip可能发生变化。这就导致原来指定的ip有问题了。
总结下,如果某个容器提供了对外的服务(如web服务),则统一的访问方式可以利用docker主机的ip地址和容器映射到主机上的端口来统一访问。
myweb:web -it ubuntu /bin/bash上面命令创建了一个新的容器test1。 这里引入了一个新的标记--link,其参数部分的myweb表示要连接的容器,web是要连接的容器的别名。
容器创建后,我们用 ping web命令发现能连接到myweb容器,这样因为用的不是ip地址,而是别名。这样即使myweb1容器重启后,上面创建的test1容器对其连接的代码或脚本也不用修改。假设myweb容器提供了web服务,容器内的端口是80.
注意:需要注意的是,如果myweb容器未启动,但有别的容器启动,test1容器利用别名web可能会关联到别的容器上,这是个问题。
Dockerfile的指令根据作用可以分为两种,构建指令和设置指令。构建指令用于构建image,其指定的操作不会在运行image的容器上执行;设置指令用于设置image的属性,其指定的操作将在运行image的容器中执行。
(1)FROM(指定基础image)构建指令,必须指定且需要在Dockerfile其他指令的前面。后续的指令都依赖于该指令指定的image。FROM指令指定的基础image可以是官方远程仓库中的,也可以位于本地仓库。该指令有两种格式:
(2)MAINTAINER(用来指定镜像创建者信息)构建指令,用于将image的制作者相关的信息写入到image中。当我们对该image执行docker inspect命令时,输出中有相应的字段记录该信息。格式:
(3)RUN(安装软件用)构建指令,RUN可以运行任何被基础image支持的命令。如基础image选择了ubuntu,那么软件管理部分只能使用ubuntu的命令。该指令有两种格式:
(4)CMD(设置container启动时执行的操作)设置指令,用于container启动时指定的操作。该操作可以是执行自定义脚本,也可以是执行系统命令。该指令只能在文件中存在一次,如果有多个,则只执行最后一条。该指令有三种格式:
(5)ENTRYPOINT(设置container启动时执行的操作)设置指令,指定容器启动时执行的命令,可以多次设置,但是只有最后一个有效。两种格式:
(6)USER(设置container容器的用户)设置指令,设置启动容器的用户,默认是root用户。
(7)EXPOSE(指定容器需要映射到宿主机器的端口)设置指令,该指令会将容器中的端口映射成宿主机器中的某个端口。当你需要访问容器的时候,可以不是用容器的IP地址而是使用宿主机器的IP地址和映射后的端口。要完成整个操作需要两个步骤,首先在Dockerfile使用EXPOSE设置需要映射的容器端口,然后在运行容器的时候指定-p选项加上EXPOSE设置的端口,这样EXPOSE设置的端口号会被随机映射成宿主机器中的一个端口号。也可以指定需要映射到宿主机器的那个端口,这时要确保宿主机器上的端口号没有被使用。EXPOSE指令可以一次设置多个端口号,相应的运行容器的时候,可以配套的多次使用-p选项。格式:
dockerrun-phost_port1:port1-phost_port2:port2-phost_port3:port3image
端口映射是docker比较重要的一个功能,原因在于我们每次运行容器的时候容器的IP地址不能指定而是在桥接网卡的地址范围内随机生成的。宿主机器的IP地址是固定的,我们可以将容器的端口的映射到宿主机器上的一个端口,免去每次访问容器中的某个服务时都要查看容器的IP的地址。对于一个运行的容器,可以使用docker port加上容器中需要映射的端口和容器的ID来查看该端口号在宿主机器上的映射端口。
(9)ADD(从src复制文件到container的dest路径)构建指令,所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0;如果是一个目录,那么会将该目录下的所有文件添加到container中,不包括目录;如果文件是可识别的压缩格式,则docker会帮忙解压缩(注意压缩格式);如果是文件且中不使用斜杠结束,则会将视为文件,的内容会写入;如果是文件且中使用斜杠结束,则会文件拷贝到目录下。格式:
(10)VOLUME(指定挂载点))设置指令,使容器中的一个目录具有持久化存储数据的功能,该目录可以被容器本身使用,也可以共享给其他容器使用。我们知道容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。当容器中的应用有持久化数据的需求时可以在Dockerfile中使用该指令。格式:
在执行Docker时,每次都要输入sudo,这样很费事,可以添加用户到docker用户组,使之获得执行权限