1 介绍
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
Docker使用Go语言开发,基于Linux内核的cgroup、namespace、以及UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。
Docker由三个基本部分组成:
- 镜像(Image):Docker镜像是Docker容器运行时的只读模板,可以用来创建Docker容器。
- 容器(Container):Docker容器是运行时的实例,它是镜像运行时的实体。
- 仓库(Repository):Docker仓库用来保存多个镜像,可以理解为代码仓库。
1.1 环境查看+安装
1、官方教程
2、确定为Centos7以上版本
# 系统内核是 3.10 以上的
[root@huawei ~]# uname -r
3.10.0-1160.45.1.el7.x86_64
cat /etc/os-release
3、yum安装gcc相关环境
yum -y install gcc
yum -y install gcc-c++
4、卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
5、安装需要的软件包
yum install -y yum-utils
6、使用阿里云镜像
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
7、更新yum软件包索引
yum makecache fast
8、安装docker相关的社区
docker-ce
:社区
docker-ee
:企业版 可以指定版本安装
yum -y install docker-ce docker-ce-cli containerd.io
9、启动docker
systemctl start docker
systemctl enable docker
10、配置镜像加速器
阿里云:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://q5vcymug.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
其他源
{
"registry-mirrors": [
"https://9cpn8tt6.mirror.aliyuncs.com",
"https://8bhew391.mirror.aliyuncs.com",
"https://almtd3fa.mirror.aliyuncs.com",
"https://hccwwfjl.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
]
}
1.2 常用命令
# 镜像操作
docker images # 查看所有本地的主机上的镜像
docker images --help # 镜像帮助
docker images -a
docker images -q
# 容器操作
# docker ps 命令
# 列出当前正在运行的容器
-a # 列出当前正在运行的容器+带出历史运行过的容器
-n=? # 显示最近创建的容器
-q # 只显示容器的编号
2 镜像命令
# 搜索镜像
docker search mysql
# 下载镜像
docker pull mysql
docker pull mysql:5.7
# 删除指定的镜像
docker rmi -f 容器删除多个镜像
# 删除多个镜像
docker rmi -f 镜像id 镜像id 镜像id
# 删除全部镜像
docker rmi $(docker images -aq)
# 查看镜像元数据
docker inspect 容器id
镜像加速器
阿里云:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://q5vcymug.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
使用镜像,启动一个容器
交互方式,启动centos
docker run -it centos-base:1.0
docker run -d --name nginx-test nginx
docker run -it centos-base01 /bin/bash
docker run -d -P --name centos-base01 centos-base /bin/bash
3 容器命令
# 启动和停止容器
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器
# 进入正在运行容器
# 格式:docker exec -it 容器id bashShell
docker exec -it e40bd5ee5f42 /bin/bash
# 进入容器 显示正在执行当前的代码
docker attach 容器id
# 删除容器
docker rm 容器id
# 删除指定的容器,不能删除正在运行的容器,如果删除 rm -f
docker rm -f $(docker ps -aq) # 删除所有的容器
docker ps -a -q|xargs docker rm # 删除所有的容器
4 容器+主机文件操作 复制
容器 —> 宿主机
docker cp 容器id:容器内路径 目的的主机路径
宿主机 —> 容器
docker cp 宿主机文件路径 镜像名称:镜像中文件存放路径
5 查看容器进程
# 命令 docker top 容器id
docker top b737e6d65198
6 查看日志
# 显示日志
-tf # 显示日志
--tail number # 要显示日志条数
docker logs -tf --tail 10 容器id
7 commit镜像
# 命令和git原理类似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
docker commit -a="有勇气的牛排" -m="add webapps app" 48629b5a69d2 tomcat02:1.0
8 DockerFile
关键字
FROM
# 基础镜像,一切从这里开始构建 centosMAINTAINER
# 镜像是谁写的:姓名+邮箱RUN
# 镜像构建的时候需要运行的命令ADD
# 步骤:tomcat镜像,这个tomcat压缩包,添加内容WORKDIR
# 镜像的工作目录VOLUME
# 挂载的目录EXPOSE
# 暴露端口配置CMD
# 指定这个容器启动的时候运行的命令,只有最后一个会生效,可被替代ENTRYPOINT
# 指定这个容器启动的时候要运行的命令,可以追加命令ONBUILD
# 当构建一个被继承 DokcerFile 这个时候就会运行 ONBUILD 的指令,触发指令COPY
# 类似ADD,将我们文件拷贝到镜像中ENV
# 构建的时候,设置环境变量
实战测试构建自己的centos
# 1.编写dockerfile的文件[root@vitloud dokcerfile]
# cat mydockerfile-centosFROM centosMAINTAINER vitcloud<vitcluod@163.com>ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATHCMD echo "---end---"CMD /bin/bash
# 2.构建docker build -f mydockerfile-centos -t mycentos:0.1 .
# 3.运行docker run -it mycentos:0.1
8.1 tomcat案例
# 启动容器docker run -it -p 8080:8080 tomcat
<h2><a id="1__0"></a>1 介绍</h2>
<p>Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。</p>
<p>Docker使用Go语言开发,基于Linux内核的cgroup、namespace、以及UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。</p>
<p>Docker由三个基本部分组成:</p>
<ul>
<li>镜像(Image):Docker镜像是Docker容器运行时的只读模板,可以用来创建Docker容器。</li>
<li>容器(Container):Docker容器是运行时的实例,它是镜像运行时的实体。</li>
<li>仓库(Repository):Docker仓库用来保存多个镜像,可以理解为代码仓库。</li>
</ul>
<h3><a id="11__12"></a>1.1 环境查看+安装</h3>
<p>1、官方教程</p>
<p>2、确定为Centos7以上版本</p>
<pre><div class="hljs"><code class="lang-shell"><span class="hljs-meta"># </span><span class="language-bash">系统内核是 3.10 以上的</span>
[root@huawei ~]# uname -r
3.10.0-1160.45.1.el7.x86_64
</code></div></pre>
<pre><div class="hljs"><code class="lang-shell">cat /etc/os-release
</code></div></pre>
<p>3、yum安装gcc相关环境</p>
<pre><div class="hljs"><code class="lang-powershell">yum <span class="hljs-literal">-y</span> install gcc
yum <span class="hljs-literal">-y</span> install gcc<span class="hljs-literal">-c</span>++
</code></div></pre>
<p>4、卸载旧版本</p>
<pre><div class="hljs"><code class="lang-powershell">yum remove docker \
docker<span class="hljs-literal">-client</span> \
docker<span class="hljs-literal">-client-latest</span> \
docker<span class="hljs-literal">-common</span> \
docker<span class="hljs-literal">-latest</span> \
docker<span class="hljs-literal">-latest-logrotate</span> \
docker<span class="hljs-literal">-logrotate</span> \
docker<span class="hljs-literal">-engine</span>
</code></div></pre>
<p>5、安装需要的软件包</p>
<pre><div class="hljs"><code class="lang-powershell">yum install <span class="hljs-literal">-y</span> yum<span class="hljs-literal">-utils</span>
</code></div></pre>
<p>6、使用阿里云镜像</p>
<pre><div class="hljs"><code class="lang-powershell">yum<span class="hljs-literal">-config-manager</span> \
<span class="hljs-literal">--add-repo</span> \
http://mirrors.aliyun.com/docker<span class="hljs-literal">-ce</span>/linux/centos/docker<span class="hljs-literal">-ce</span>.repo
<span class="hljs-comment"># 最新阿里</span>
yum<span class="hljs-literal">-config-manager</span> <span class="hljs-literal">--add-repo</span> http://mirrors.aliyun.com/docker<span class="hljs-literal">-ce</span>/linux/centos/docker<span class="hljs-literal">-ce</span>.repo
</code></div></pre>
<p>7、更新yum软件包索引</p>
<pre><div class="hljs"><code class="lang-powershell">yum makecache fast
</code></div></pre>
<p>8、安装docker相关的社区<br />
<code>docker-ce</code>:社区<br />
<code>docker-ee</code>:企业版 可以指定版本安装</p>
<pre><div class="hljs"><code class="lang-powershell">yum <span class="hljs-literal">-y</span> install docker<span class="hljs-literal">-ce</span> docker<span class="hljs-literal">-ce-cli</span> containerd.io
</code></div></pre>
<p>9、启动docker</p>
<pre><div class="hljs"><code class="lang-powershell">systemctl <span class="hljs-built_in">start</span> docker
</code></div></pre>
<pre><div class="hljs"><code class="lang-powershell"><span class="hljs-comment"># 开机启动</span>
systemctl enable docker
</code></div></pre>
<p>10、配置镜像加速器</p>
<p>阿里云:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors</p>
<pre><div class="hljs"><code class="lang-shell">sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://q5vcymug.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
</code></div></pre>
<p>其他源</p>
<pre><div class="hljs"><code class="lang-powershell">{
<span class="hljs-string">"registry-mirrors"</span>: [
<span class="hljs-string">"https://9cpn8tt6.mirror.aliyuncs.com"</span>,
<span class="hljs-string">"https://8bhew391.mirror.aliyuncs.com"</span>,
<span class="hljs-string">"https://almtd3fa.mirror.aliyuncs.com"</span>,
<span class="hljs-string">"https://hccwwfjl.mirror.aliyuncs.com"</span>,
<span class="hljs-string">"https://registry.docker-cn.com"</span>,
<span class="hljs-string">"http://hub-mirror.c.163.com"</span>
]
}
</code></div></pre>
<h3><a id="12__119"></a>1.2 常用命令</h3>
<pre><div class="hljs"><code class="lang-shell"><span class="hljs-meta"># </span><span class="language-bash">镜像操作</span>
docker images # 查看所有本地的主机上的镜像
docker images --help # 镜像帮助
docker images -a
docker images -q
<span class="hljs-meta">
# </span><span class="language-bash">容器操作</span>
<span class="hljs-meta"># </span><span class="language-bash">docker ps 命令</span>
<span class="hljs-meta"> # </span><span class="language-bash">列出当前正在运行的容器</span>
-a # 列出当前正在运行的容器+带出历史运行过的容器
-n=? # 显示最近创建的容器
-q # 只显示容器的编号
</code></div></pre>
<h2><a id="2__138"></a>2 镜像命令</h2>
<pre><div class="hljs"><code class="lang-shell"><span class="hljs-meta"># </span><span class="language-bash">搜索镜像</span>
docker search mysql
<span class="hljs-meta">
# </span><span class="language-bash">下载镜像</span>
docker pull mysql
docker pull mysql:5.7
<span class="hljs-meta">
# </span><span class="language-bash">删除指定的镜像</span>
docker rmi -f 容器删除多个镜像
<span class="hljs-meta"># </span><span class="language-bash">删除多个镜像</span>
docker rmi -f 镜像id 镜像id 镜像id
<span class="hljs-meta"># </span><span class="language-bash">删除全部镜像</span>
docker rmi $(docker images -aq)
<span class="hljs-meta">
# </span><span class="language-bash">查看镜像元数据</span>
docker inspect 容器id
</code></div></pre>
<p>镜像加速器</p>
<p>阿里云:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors</p>
<pre><div class="hljs"><code class="lang-shell">sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://q5vcymug.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
</code></div></pre>
<p>使用镜像,启动一个容器</p>
<p>交互方式,启动centos</p>
<pre><div class="hljs"><code class="lang-powershell">docker run <span class="hljs-literal">-it</span> centos<span class="hljs-literal">-base</span>:<span class="hljs-number">1.0</span>
</code></div></pre>
<pre><div class="hljs"><code class="lang-powershell">docker run <span class="hljs-literal">-d</span> <span class="hljs-literal">--name</span> nginx<span class="hljs-literal">-test</span> nginx
</code></div></pre>
<pre><div class="hljs"><code class="lang-powershell">docker run <span class="hljs-literal">-it</span> centos<span class="hljs-literal">-base01</span> /bin/bash
</code></div></pre>
<pre><div class="hljs"><code class="lang-powershell">docker run <span class="hljs-literal">-d</span> <span class="hljs-literal">-P</span> <span class="hljs-literal">--name</span> centos<span class="hljs-literal">-base01</span> centos<span class="hljs-literal">-base</span> /bin/bash
</code></div></pre>
<h2><a id="3__193"></a>3 容器命令</h2>
<pre><div class="hljs"><code class="lang-shell"><span class="hljs-meta"># </span><span class="language-bash">启动和停止容器</span>
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器
<span class="hljs-meta">
# </span><span class="language-bash">进入正在运行容器</span>
<span class="hljs-meta"># </span><span class="language-bash">格式:docker <span class="hljs-built_in">exec</span> -it 容器<span class="hljs-built_in">id</span> bashShell</span>
docker exec -it e40bd5ee5f42 /bin/bash
<span class="hljs-meta"># </span><span class="language-bash">进入容器 显示正在执行当前的代码</span>
docker attach 容器id
<span class="hljs-meta">
# </span><span class="language-bash">删除容器</span>
docker rm 容器id
<span class="hljs-meta"># </span><span class="language-bash">删除指定的容器,不能删除正在运行的容器,如果删除 <span class="hljs-built_in">rm</span> -f</span>
docker rm -f $(docker ps -aq) # 删除所有的容器
docker ps -a -q|xargs docker rm # 删除所有的容器
</code></div></pre>
<h2><a id="4___215"></a>4 容器+主机文件操作 复制</h2>
<p>容器 —> 宿主机</p>
<pre><div class="hljs"><code class="lang-shell">docker cp 容器id:容器内路径 目的的主机路径
</code></div></pre>
<p>宿主机 —> 容器</p>
<pre><div class="hljs"><code class="lang-powershell">docker <span class="hljs-built_in">cp</span> 宿主机文件路径 镜像名称:镜像中文件存放路径
</code></div></pre>
<h2><a id="5__229"></a>5 查看容器进程</h2>
<pre><div class="hljs"><code class="lang-shell"><span class="hljs-meta"># </span><span class="language-bash">命令 docker top 容器<span class="hljs-built_in">id</span></span>
docker top b737e6d65198
</code></div></pre>
<h2><a id="6__236"></a>6 查看日志</h2>
<pre><div class="hljs"><code class="lang-shell"><span class="hljs-meta"># </span><span class="language-bash">显示日志</span>
-tf # 显示日志
--tail number # 要显示日志条数
docker logs -tf --tail 10 容器id
</code></div></pre>
<h2><a id="7_commit_247"></a>7 commit镜像</h2>
<pre><div class="hljs"><code class="lang-shell"><span class="hljs-meta"># </span><span class="language-bash">命令和git原理类似</span>
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
docker commit -a="有勇气的牛排" -m="add webapps app" 48629b5a69d2 tomcat02:1.0
</code></div></pre>
<h2><a id="8_DockerFile_257"></a>8 DockerFile</h2>
<p>关键字</p>
<pre><div class="hljs"><code class="lang-shell">FROM
<span class="hljs-meta"># </span><span class="language-bash">基础镜像,一切从这里开始构建 centosMAINTAINER</span>
<span class="hljs-meta"># </span><span class="language-bash">镜像是谁写的:姓名+邮箱RUN</span>
<span class="hljs-meta"># </span><span class="language-bash">镜像构建的时候需要运行的命令ADD</span>
<span class="hljs-meta"># </span><span class="language-bash">步骤:tomcat镜像,这个tomcat压缩包,添加内容WORKDIR</span>
<span class="hljs-meta"># </span><span class="language-bash">镜像的工作目录VOLUME</span>
<span class="hljs-meta"># </span><span class="language-bash">挂载的目录EXPOSE</span>
<span class="hljs-meta"># </span><span class="language-bash">暴露端口配置CMD</span>
<span class="hljs-meta"># </span><span class="language-bash">指定这个容器启动的时候运行的命令,只有最后一个会生效,可被替代ENTRYPOINT</span>
<span class="hljs-meta"># </span><span class="language-bash">指定这个容器启动的时候要运行的命令,可以追加命令ONBUILD</span>
<span class="hljs-meta"># </span><span class="language-bash">当构建一个被继承 DokcerFile 这个时候就会运行 ONBUILD 的指令,触发指令COPY</span>
<span class="hljs-meta"># </span><span class="language-bash">类似ADD,将我们文件拷贝到镜像中ENV</span>
<span class="hljs-meta"># </span><span class="language-bash">构建的时候,设置环境变量</span>
</code></div></pre>
<blockquote>
<p>实战测试构建自己的centos</p>
</blockquote>
<pre><div class="hljs"><code class="lang-shell"><span class="hljs-meta"># </span><span class="language-bash">1.编写dockerfile的文件[root@vitloud dokcerfile]</span>
<span class="hljs-meta"># </span><span class="language-bash"><span class="hljs-built_in">cat</span> mydockerfile-centosFROM centosMAINTAINER vitcloud<vitcluod@163.com>ENV MYPATH /usr/localWORKDIR <span class="hljs-variable">$MYPATHRUN</span> yum -y install vimRUN yum -y install net-toolsEXPOSE 80CMD <span class="hljs-built_in">echo</span> <span class="hljs-variable">$MYPATHCMD</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">"---end---"</span>CMD /bin/bash</span>
<span class="hljs-meta"># </span><span class="language-bash">2.构建docker build -f mydockerfile-centos -t mycentos:0.1 .</span>
<span class="hljs-meta"># </span><span class="language-bash">3.运行docker run -it mycentos:0.1</span>
</code></div></pre>
<h3><a id="81_tomcat_286"></a>8.1 tomcat案例</h3>
<pre><div class="hljs"><code class="lang-shell"><span class="hljs-meta"># </span><span class="language-bash">启动容器docker run -it -p 8080:8080 tomcat</span>
</code></div></pre>
留言