在Ubuntu中安装Docker和docker的使用
<h2>1.在Ubuntu中安装Docker</h2><p>安装命令</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:true;">sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && sudo add-apt-repository "deb http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" && sudo apt-get update && sudo apt-get install -y docker-ce</pre>
</div>
<p>配置镜像加速器</p>
<p>针对Docker客户端版本大于 1.10.0 的用户<br>您可以通过修改daemon配置文件<code>/etc/docker/daemon.json</code>来使用加速器</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">mkdir</span> -p /etc/docker && <span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">tee</span> /etc/docker/daemon.json <<-<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">EOF</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">registry-mirrors</span><span style="color: rgba(128, 0, 0, 1)">"</span>: [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">https://epsax6ut.mirror.aliyuncs.com</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">],
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">log-driver</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">json-file</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">log-opts</span><span style="color: rgba(128, 0, 0, 1)">"</span>: {<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">max-size</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">10m</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">max-file</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">3</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">}
}
EOF
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> systemctl daemon-<span style="color: rgba(0, 0, 0, 1)">reload
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> systemctl restart docker</pre>
</div>
<p>为了避免每次命令都输入sudo,可以设置用户权限,<span style="color: rgba(255, 0, 0, 1)"><strong>注意执行后须注销重新登录</strong></span></p>
<div class="cnblogs_code">
<pre>sudo usermod -a -G docker $USER</pre>
</div>
<h2>2.启动与停止</h2>
<p>安装完成Docker后,默认已经启动了docker服务,如需手动控制docker服务的启停,可执行如下命令</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># 启动docker
sudo service docker start
# 停止docker
sudo service docker stop
# 重启docker
sudo service docker restart</span></pre>
</div>
<h2 id="3--docker镜像操作">3. Docker镜像操作</h2>
<h3 id="什么是docker镜像">什么是Docker镜像</h3>
<p>Docker 镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引 导系统,即 bootfs,这很像典型的 Linux/Unix 的引导文件系统。Docker 用户几乎永远不会和 引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系 统则会被卸载,以留出更多的内存供磁盘镜像使用。Docker 容器启动是需要一些文件的, 而这些文件就可以称为 Docker 镜像。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417295/201907/1417295-20190725140947156-1017657564.png" alt=""></p>
<p>Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。</p>
<p>image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。</p>
<p>image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,我们应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。</p>
<p>为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库 Docker Hub 是最重要、最常用的 image 仓库。此外,出售自己制作的 image 文件也是可以的。</p>
<h3 id="列出镜像">列出镜像</h3>
<div class="cnblogs_code">
<pre>docker images</pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/1417295/201907/1417295-20190725141242417-1286415588.png" alt=""></p>
<ul>
<li>REPOSITORY:镜像所在的仓库名称</li>
<li>TAG:镜像标签</li>
<li>IMAGEID:镜像ID</li>
<li>CREATED:镜像的创建日期(不是获取该镜像的日期)</li>
<li>SIZE:镜像大小</li>
</ul>
<p>为了区分同一个仓库下的不同镜像,Docker 提供了一种称为标签(Tag)的功能。每个 镜像在列出来时都带有一个标签,例如latest、 12.10、12.04 等等。每个标签对组成特定镜像的一 些镜像层进行标记(比如,标签 12.04 就是对所有 Ubuntu12.04 镜像层的标记)。这种机制 使得同一个仓库中可以存储多个镜像。</p>
<p>我们在运行同一个仓库中的不同镜像时,可以通过在仓库名后面加上一个冒号和标签名 来指定该仓库中的某一具体的镜像,例如 docker run --name custom_container_name –i –t docker.io/ubunto:12.04 /bin/bash,表明从镜像 Ubuntu:12.04 启动一个容器,而这个镜像的操 作系统就是 Ubuntu:12.04。在构建容器时指定仓库的标签也是一个好习惯。</p>
<h3>搜索镜像</h3>
<div class="cnblogs_code">
<pre>docker search django</pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/1417295/201907/1417295-20190725141521781-1963054437.png" alt=""></p>
<h3 id="拉取镜像">拉取镜像</h3>
<p>Docker维护了镜像仓库,分为共有和私有两种,共有的官方仓库Docker Hub(https://hub.docker.com/)是最重要最常用的镜像仓库。私有仓库(Private Registry)是开发者或者企业自建的镜像存储库,通常用来保存企业 内部的 Docker 镜像,用于内部开发流程和产品的发布、版本控制。</p>
<p>要想获取某个镜像,我们可以使用pull命令,从仓库中拉取镜像到本地,如</p>
<div class="cnblogs_code">
<pre>docker pull hackeryx/ubuntu:<span style="color: rgba(128, 0, 128, 1)">16.04</span></pre>
</div>
<h3 id="删除镜像">删除镜像</h3>
<div class="cnblogs_code">
<pre>docker image rm 镜像名或镜像id</pre>
</div>
<h2 id="4--docker-容器操作">4. Docker 容器操作</h2>
<h3 id="创建容器">创建容器</h3>
<div class="cnblogs_code">
<pre>docker run 镜像名 [向启动容器中传入的命令]</pre>
</div>
<p>常用可选参数说明:</p>
<ul>
<li>-i 表示以“交互模式”运行容器</li>
<li>-t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即 分配一个伪终端。</li>
<li>--name 为创建的容器命名</li>
<li>-v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器中目录),可以使 用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后 共享到容器上。</li>
<li>-d 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不 会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。</li>
<li>-p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p 做多个端口映射</li>
<li>-e 为容器设置环境变量</li>
<li>--network=host 表示将主机的网络环境映射到容器中,容器的网络与主机相同</li>
</ul>
<h4 id="交互式容器">交互式容器</h4>
<p>例如,创建一个交互式容器,并命名为myubuntu</p>
<div class="cnblogs_code">
<pre>docker run -it --name=ubuntu --network=host hackeryx/ubuntu:<span style="color: rgba(128, 0, 128, 1)">16.04</span> /bin/bash</pre>
</div>
<p>在容器中可以随意执行linux命令,就是一个ubuntu的环境,当执行exit命令退出时,该容器也随之停止。</p>
<h4 id="守护式容器">守护式容器</h4>
<p>创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。在容器内部exit退出时,容器也不会停止。</p>
<div class="cnblogs_code">
<pre>docker run -itd --name=ubuntu2 --network=host hackeryx/ubuntu:<span style="color: rgba(128, 0, 128, 1)">16.04</span></pre>
</div>
<h4 id="进入已运行的容器">进入已运行的容器</h4>
<div class="cnblogs_code">
<pre>docker exec -it 容器名或容器id 进入后执行的第一个命令<br># 例如<br>docker exec -it ubuntu /bin/bash</pre>
</div>
<h4 id="查看容器">查看容器</h4>
<div class="cnblogs_code">
<pre><code class="lang-shell"># 列出本机所有容器,包括已经终止运行的</code></pre>
<pre>docker ps -a</pre>
</div>
<h4 id="停止与启动容器">停止与启动容器</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># 停止一个已经在运行的容器
docker container stop 容器名或容器id
# 启动一个已经停止的容器
docker container start 容器名或容器id
# kill掉一个已经在运行的容器
docker container kill 容器名或容器id</span></pre>
</div>
<h4 id="删除容器">删除容器</h4>
<div class="cnblogs_code">
<pre>docker container rm 容器名或容器id</pre>
</div>
<h2 id="5--将容器保存为镜像">5. 将容器保存为镜像</h2>
<p>我们可以通过如下命令将容器保存为镜像</p>
<div class="cnblogs_code">
<pre>docker commit 容器名 镜像名</pre>
</div>
<h2 id="6--镜像备份与迁移">6. 镜像备份与迁移</h2>
<p>我们可以通过save命令将镜像打包成文件,拷贝给别人使用</p>
<div class="cnblogs_code">
<pre>docker save -o 保存的文件名 镜像名</pre>
</div>
<p>例如</p>
<div class="cnblogs_code">
<pre>docker save -o ./ubuntu.tar ubuntu</pre>
</div>
<p>在拿到镜像文件后,可以通过load方法,将镜像加载到本地</p>
<div class="cnblogs_code">
<pre>docker load -i ./ubuntu.tar</pre>
</div>
<p> </p><br><br>
来源:https://www.cnblogs.com/blog-rui/p/11244023.html
頁:
[1]