<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Docker &#8211; wqh博客</title>
	<atom:link href="https://wangqianhong.com/tag/docker/feed/" rel="self" type="application/rss+xml" />
	<link>https://wangqianhong.com</link>
	<description>和而不同</description>
	<lastBuildDate>Fri, 01 Aug 2025 09:42:20 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://wangqianhong.com/wp-content/uploads/2020/09/cropped-1-1-1-32x32.png</url>
	<title>Docker &#8211; wqh博客</title>
	<link>https://wangqianhong.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Docker 清理</title>
		<link>https://wangqianhong.com/2024/04/docker-%e6%b8%85%e7%90%86/</link>
					<comments>https://wangqianhong.com/2024/04/docker-%e6%b8%85%e7%90%86/#respond</comments>
		
		<dc:creator><![CDATA[wqh_work]]></dc:creator>
		<pubDate>Sat, 27 Apr 2024 09:38:00 +0000</pubDate>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://wangqianhong.com/?p=3869</guid>

					<description><![CDATA[<p>docker在使用的过程中会越来越臃肿，可以用下面的命令瘦身 Volume 用于持久化和共享容器数据&#8230; <a href="https://wangqianhong.com/2024/04/docker-%e6%b8%85%e7%90%86/" class="more-link read-more" rel="bookmark">继续阅读 <span class="screen-reader-text">Docker 清理</span><i class="fa fa-arrow-right"></i></a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2024/04/docker-%e6%b8%85%e7%90%86/">Docker 清理</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>docker在使用的过程中会越来越臃肿，可以用下面的命令瘦身</p>



<p>Volume 用于持久化和共享容器数据，清理不再使用的 Volume 可以释放磁盘空间。常用的清理方法有：</p>



<ol><li><strong>查看现有 Volume</strong></li></ol>



<pre class="wp-block-code"><code># 列出所有 Volume
docker volume ls

# 只列出“悬空”（dangling，即未被任何容器使用）的 Volume
docker volume ls -f dangling=true</code></pre>



<ol start="2"><li><strong>删除单个 Volume</strong></li></ol>



<pre class="wp-block-code"><code># 删除指定名字的 Volume
docker volume rm VOLUME_NAME</code></pre>



<ol start="3"><li><strong>一键清理所有“悬空”Volume</strong></li></ol>



<pre class="wp-block-code"><code># 交互式确认
docker volume prune

# 或者跳过确认
docker volume prune -f</code></pre>



<p>此命令会删除所有未被任何容器使用的 Volume。</p>



<ol start="4"><li><strong>清理所有未使用的 Docker 资源（网络、镜像、容器、Volume）</strong><br>如果想一并清理所有未使用的资源，可以用：</li></ol>



<pre class="wp-block-code"><code>docker system prune --volumes</code></pre>



<p>它会：</p>



<ul><li>删除所有停止的容器</li><li>删除所有未用的网络</li><li>删除所有 dangling 镜像（中间层）</li><li>删除所有未使用的 Volume</li></ul>



<p>加上 <code>-a</code> 可以连同未被容器直接引用但不是 dangling 的镜像一并清理：</p>



<pre class="wp-block-code"><code>docker system prune -a --volumes</code></pre>



<ul><li><strong>谨慎操作</strong>：清理 Volume 会永久丢失其中的数据，务必确认不再需要或已做好备份。</li><li><strong>定期检查</strong>：在开发环境中频繁创建/删除容器，很容易积累大量悬空 Volume，可考虑配置 CI/CD 或定时任务自动执行 <code>docker volume prune -f</code>。</li><li><strong>脚本化清理</strong>：如果想针对名称模式或创建日期做更精细的清理，可以结合 <code>docker volume ls --format '{{.Name}} {{.CreatedAt}}'</code> 输出，再用 shell 脚本过滤并依次 <code>docker volume rm</code>。</li></ul>



<p>这样，你就可以根据需要，按容器级别或全局一次性地清理 Docker Volume，释放磁盘空间。</p>
<p><a rel="nofollow" href="https://wangqianhong.com/2024/04/docker-%e6%b8%85%e7%90%86/">Docker 清理</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wangqianhong.com/2024/04/docker-%e6%b8%85%e7%90%86/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker镜像容器</title>
		<link>https://wangqianhong.com/2022/05/docker%e9%95%9c%e5%83%8f%e5%ae%b9%e5%99%a8/</link>
					<comments>https://wangqianhong.com/2022/05/docker%e9%95%9c%e5%83%8f%e5%ae%b9%e5%99%a8/#respond</comments>
		
		<dc:creator><![CDATA[wqh_work]]></dc:creator>
		<pubDate>Sun, 15 May 2022 05:29:00 +0000</pubDate>
				<category><![CDATA[工具文章]]></category>
		<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://wangqianhong.com/?p=3195</guid>

					<description><![CDATA[<p>在使用Docker过程上，经常会碰到备份迁移 镜像迁移 镜像导出成tar包 导入镜像的tar包 导入&#8230; <a href="https://wangqianhong.com/2022/05/docker%e9%95%9c%e5%83%8f%e5%ae%b9%e5%99%a8/" class="more-link read-more" rel="bookmark">继续阅读 <span class="screen-reader-text">Docker镜像容器</span><i class="fa fa-arrow-right"></i></a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/05/docker%e9%95%9c%e5%83%8f%e5%ae%b9%e5%99%a8/">Docker镜像容器</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>在使用Docker过程上，经常会碰到备份迁移</p>



<h3>镜像迁移</h3>



<p>镜像导出成tar包</p>



<pre class="wp-block-code"><code>docker save image_id -o you_name.tar newname:tag</code></pre>



<p>导入镜像的tar包</p>



<pre class="wp-block-code"><code>docker load -i coturn.tar</code></pre>



<p>导入的镜像如果是none，也可以用tag命令修改</p>



<pre class="wp-block-code"><code>docker tag image_id newname:tag</code></pre>



<h3>容器迁移</h3>



<p>容器导出成tar包</p>



<pre class="wp-block-code"><code>docker export container_id -o you_name.tar</code></pre>



<p>导入tar包</p>



<pre class="wp-block-code"><code>docker import you_name.tar newname:tag</code></pre>



<h3>命令区别</h3>



<pre class="wp-block-preformatted"><strong><code>docker save</code>保存的是镜像（image）,docker export保存的是容器（container)；</strong>
<strong><code>docker load</code>用来载入镜像包，docker import用来载入容器包，但两者都会恢复为镜像；</strong>
<strong><code>docker load</code>不能对载入的镜像重命名，而docker import可以为镜像指定新名称。</strong>
<strong><code>docker export</code>的包会比save的包要小，原因是save的是一个分层的文件系统，export导出的只是一个linux系统的文件目录。</strong></pre>



<p></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/05/docker%e9%95%9c%e5%83%8f%e5%ae%b9%e5%99%a8/">Docker镜像容器</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wangqianhong.com/2022/05/docker%e9%95%9c%e5%83%8f%e5%ae%b9%e5%99%a8/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker运行Redis</title>
		<link>https://wangqianhong.com/2022/02/docker%e8%bf%90%e8%a1%8credis/</link>
					<comments>https://wangqianhong.com/2022/02/docker%e8%bf%90%e8%a1%8credis/#respond</comments>
		
		<dc:creator><![CDATA[wqh_work]]></dc:creator>
		<pubDate>Fri, 25 Feb 2022 03:21:00 +0000</pubDate>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Redis]]></category>
		<guid isPermaLink="false">https://wangqianhong.com/?p=2872</guid>

					<description><![CDATA[<p>配置文件 在官网下载最新稳定版 https://redis.io/download/ 解压获取目录下&#8230; <a href="https://wangqianhong.com/2022/02/docker%e8%bf%90%e8%a1%8credis/" class="more-link read-more" rel="bookmark">继续阅读 <span class="screen-reader-text">Docker运行Redis</span><i class="fa fa-arrow-right"></i></a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/02/docker%e8%bf%90%e8%a1%8credis/">Docker运行Redis</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<h3>配置文件</h3>



<p>在官网下载最新稳定版 <a href="https://redis.io/download/" target="_blank" rel="noreferrer noopener">https://redis.io/download/</a></p>



<p>解压获取目录下面的redis.conf</p>



<h3>拉取镜像</h3>



<p>找到对应版本的镜像 <a href="https://hub.docker.com/_/redis/tags" target="_blank" rel="noreferrer noopener">https://hub.docker.com/_/redis/tags</a></p>



<pre class="wp-block-code"><code>docker pull redis:7.2.4</code></pre>



<h3>修改配置文件</h3>



<pre class="wp-block-preformatted">#bind 127.0.0.1 -::1 #注释掉这部分，使redis可以外部访问
daemonize no #不用守护线程的方式启动
requirepass 你的密码 #给redis设置密码
appendonly yes #redis持久化 默认是no
dir /data #修改数据存储目录</pre>



<h3>运行镜像</h3>



<pre class="wp-block-preformatted"><code>docker run -p 6379:6379 --name redis -e TZ=Asia/Shanghai -v /mnt/redis/redis.conf:/etc/redis/redis.conf -v /data/redis:/data -d redis:7.2.4 redis-server /etc/redis/redis.conf</code>

-p 6379:6379:把容器内的6379端口映射到宿主机6379端口
-v /mnt/redis/redis.conf:/etc/redis/redis.conf：把宿主机配置好的redis.conf放到容器内的这个位置中
-v /data/redis:/data：把redis持久化的数据在宿主机内显示，做数据备份
redis-server /etc/redis/redis.conf：让redis按照redis.conf的配置启动</pre>



<h3>查看镜像</h3>



<p id="block-11fb0655-743d-457f-9498-e6b71a1e7b27">查看镜像是否成功运行 <code>docker ps -a</code></p>



<pre class="wp-block-preformatted">CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
59cbeaab6247 redis:7.2.4 "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:6379-&gt;6379/tcp, :::6379-&gt;6379/tcp redi</pre>



<p>运行Redis客户端命令<code> docker exec -it 59cbeaab6247 redis-cli</code></p>



<p></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/02/docker%e8%bf%90%e8%a1%8credis/">Docker运行Redis</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wangqianhong.com/2022/02/docker%e8%bf%90%e8%a1%8credis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker运行MongoDB</title>
		<link>https://wangqianhong.com/2022/02/docker%e8%bf%90%e8%a1%8cmongodb/</link>
					<comments>https://wangqianhong.com/2022/02/docker%e8%bf%90%e8%a1%8cmongodb/#respond</comments>
		
		<dc:creator><![CDATA[wqh_work]]></dc:creator>
		<pubDate>Sat, 19 Feb 2022 05:31:00 +0000</pubDate>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[Centos]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[MongoDB]]></category>
		<guid isPermaLink="false">https://wangqianhong.com/?p=2841</guid>

					<description><![CDATA[<p>MongoDB是NoSQL类型的数据库。它支持的数据结构非常松散，是类似json的bson格式，因此&#8230; <a href="https://wangqianhong.com/2022/02/docker%e8%bf%90%e8%a1%8cmongodb/" class="more-link read-more" rel="bookmark">继续阅读 <span class="screen-reader-text">Docker运行MongoDB</span><i class="fa fa-arrow-right"></i></a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/02/docker%e8%bf%90%e8%a1%8cmongodb/">Docker运行MongoDB</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>MongoDB是NoSQL类型的数据库。它支持的数据结构非常松散，是类似json的bson格式，因此可以存储比较复杂的数据类型。</p>



<h3>拉取镜像</h3>



<pre class="wp-block-code"><code>docker pull mongodb/mongodb-community-server</code></pre>



<h3>配置文件</h3>



<p>创建文件<code>/mnt/mongodb/mongo.conf</code></p>



<pre class="wp-block-preformatted"><code>systemLog:
  destination: file
  path: /var/log/mongodb/mongod.log
  logAppend: true
storage:
  dbPath: /data/db
net:
  port: 27017
  bindIp: 0.0.0.0
security:
  authorization: enabled</code>

systemLog 写入日志文件的地址是容器中的路径
storage 数据库目录是容器中的路径
net 指定容器mongodb启动监听27017端口, 0.0.0.0 是为了让宿主机可以访问容器的mongodb服务
security 开启账号密码登录验证方式</pre>



<h3>运行镜像</h3>



<pre class="wp-block-code"><code>docker run --name mongodb -p 27017:27017 -e TZ=Asia/Shanghai -v /mnt/mongodb/mongo.conf:/etc/conf/mongo.conf -v /data/mongodb:/data -d mongodb/mongodb-community-server:latest -f /etc/conf/mongo.conf</code></pre>



<h3>新增账号</h3>



<pre class="wp-block-code"><code> docker exec -it mongo mongosh</code></pre>



<p>切换的admin</p>



<pre class="wp-block-preformatted">test&gt; <code>use admin</code>
switched to db admin
admin&gt; <code>db.createUser({user:"账号",pwd:"密码",roles:["root"]})</code>
{ ok: 1 }</pre>



<p>验证账号</p>



<pre class="wp-block-preformatted">admin&gt; <code>db.auth("账号","密码")</code>
{ ok: 1 }</pre>



<p></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/02/docker%e8%bf%90%e8%a1%8cmongodb/">Docker运行MongoDB</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wangqianhong.com/2022/02/docker%e8%bf%90%e8%a1%8cmongodb/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker如何增加端口映射</title>
		<link>https://wangqianhong.com/2022/01/%e5%9c%a8linux%e4%b8%8b%e7%9a%84docker%e5%a6%82%e4%bd%95%e5%a2%9e%e5%8a%a0%e7%ab%af%e5%8f%a3%e6%98%a0%e5%b0%84/</link>
					<comments>https://wangqianhong.com/2022/01/%e5%9c%a8linux%e4%b8%8b%e7%9a%84docker%e5%a6%82%e4%bd%95%e5%a2%9e%e5%8a%a0%e7%ab%af%e5%8f%a3%e6%98%a0%e5%b0%84/#respond</comments>
		
		<dc:creator><![CDATA[wqh_work]]></dc:creator>
		<pubDate>Fri, 28 Jan 2022 11:04:00 +0000</pubDate>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[Centos]]></category>
		<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://wangqianhong.com/?p=2807</guid>

					<description><![CDATA[<p>docker容器在运行时，有时候需要新增容器的端口映射 Linux环境 首先找出容器ID，使用命令d&#8230; <a href="https://wangqianhong.com/2022/01/%e5%9c%a8linux%e4%b8%8b%e7%9a%84docker%e5%a6%82%e4%bd%95%e5%a2%9e%e5%8a%a0%e7%ab%af%e5%8f%a3%e6%98%a0%e5%b0%84/" class="more-link read-more" rel="bookmark">继续阅读 <span class="screen-reader-text">Docker如何增加端口映射</span><i class="fa fa-arrow-right"></i></a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/01/%e5%9c%a8linux%e4%b8%8b%e7%9a%84docker%e5%a6%82%e4%bd%95%e5%a2%9e%e5%8a%a0%e7%ab%af%e5%8f%a3%e6%98%a0%e5%b0%84/">Docker如何增加端口映射</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>docker容器在运行时，有时候需要新增容器的端口映射</p>



<h3>Linux环境</h3>



<p>首先找出容器ID，使用命令<code>docker ps -a</code></p>



<p>找到容器的ID，这里是b7cf937a67e857aa04a120e172b79d152d5946b93f2851068cdaa4c054cd4941 然后找到config.v2.json配置文件</p>



<pre class="wp-block-code"><code>/var/lib/docker/containers/b7cf937a67e857aa04a120e172b79d152d5946b93f2851068cdaa4c054cd4941/config.v2.json</code></pre>



<p id="block-c3728f70-c84b-469f-a38f-a69ddb0d6e5c">在ExposedPorts下面新增<code>"9848/tcp":{},"9849/tcp":{}</code>，9848和9849就是新增的服务器端口</p>



<p>&#8220;ExposedPorts&#8221;:{&#8230;&#8230;<code>"9848/tcp":{},"9849/tcp":{</code>}}</p>



<p>  最后修改hostconfig.json配置文件</p>



<pre class="wp-block-code"><code>/var/lib/docker/containers/b7cf937a67e857aa04a120e172b79d152d5946b93f2851068cdaa4c054cd4941/hostconfig.json</code></pre>



<p> 在PortBindings下面新增<code>"9848/tcp":[{"HostIp":"","HostPort":"11006"}],"9849/tcp":[{"HostIp":"","HostPort":"11007"}]</code></p>



<p>9848和9849就是新增的服务器端口，11006和11007就是映射出来的端口 </p>



<pre class="wp-block-preformatted">"PortBindings":{......"9848/tcp":[{"HostIp":"","HostPort":"11006"}],"9849/tcp":[{"HostIp":"","HostPort":"11007"}] }</pre>



<p>修改完之后，重启docker</p>



<pre class="wp-block-code"><code>systemctl restart docker</code></pre>



<h3>Windows环境</h3>



<p>找到配置文件路径</p>



<pre class="wp-block-code"><code>\\wsl.localhost\docker-desktop-data\data\docker\containers\</code></pre>



<p>其它操作和linux下面是一样的</p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/01/%e5%9c%a8linux%e4%b8%8b%e7%9a%84docker%e5%a6%82%e4%bd%95%e5%a2%9e%e5%8a%a0%e7%ab%af%e5%8f%a3%e6%98%a0%e5%b0%84/">Docker如何增加端口映射</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wangqianhong.com/2022/01/%e5%9c%a8linux%e4%b8%8b%e7%9a%84docker%e5%a6%82%e4%bd%95%e5%a2%9e%e5%8a%a0%e7%ab%af%e5%8f%a3%e6%98%a0%e5%b0%84/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Windows修改Docker镜像位置</title>
		<link>https://wangqianhong.com/2021/07/windows%e4%bf%ae%e6%94%b9docker%e9%95%9c%e5%83%8f%e4%bd%8d%e7%bd%ae/</link>
					<comments>https://wangqianhong.com/2021/07/windows%e4%bf%ae%e6%94%b9docker%e9%95%9c%e5%83%8f%e4%bd%8d%e7%bd%ae/#respond</comments>
		
		<dc:creator><![CDATA[wqh_work]]></dc:creator>
		<pubDate>Tue, 20 Jul 2021 06:20:10 +0000</pubDate>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://wangqianhong.com/?p=1668</guid>

					<description><![CDATA[<p>新版Docker使用wsl管理镜像，默认都安装在C盘下面，我们可以使用wsl命令把镜像文件安装到其他&#8230; <a href="https://wangqianhong.com/2021/07/windows%e4%bf%ae%e6%94%b9docker%e9%95%9c%e5%83%8f%e4%bd%8d%e7%bd%ae/" class="more-link read-more" rel="bookmark">继续阅读 <span class="screen-reader-text">Windows修改Docker镜像位置</span><i class="fa fa-arrow-right"></i></a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2021/07/windows%e4%bf%ae%e6%94%b9docker%e9%95%9c%e5%83%8f%e4%bd%8d%e7%bd%ae/">Windows修改Docker镜像位置</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>新版Docker使用wsl管理镜像，默认都安装在C盘下面，我们可以使用wsl命令把镜像文件安装到其他目录。</p>



<p>在目录<code>C:\Users\你的用户名\AppData\Local\Docker\wsl</code>下面我们可以找到Docker数据文件，其中有两个文件夹data和distro。</p>



<p>我们可以在D盘新建两个对应的文件夹，例如：<code>D:\Data\docker\data</code>和<code>D:\Data\docker\distro</code>。</p>



<p>首先关闭Docker Desktop，执行命令导出C盘两个文件夹里面的数据，import和export时间取决于数据文件的大小。：</p>



<pre class="wp-block-preformatted"><code>wsl --export docker-desktop "D:\data\docker\docker-desktop.tar"</code>
<code>wsl --export docker-desktop-data "D:\data\docker\docker-desktop-data.tar"</code>
</pre>



<p>然后执行命令注销C盘的路径：</p>



<pre class="wp-block-preformatted"><code>wsl --unregister docker-desktop</code>
<code>wsl --unregister docker-desktop-data</code></pre>



<p>最后重新注册D盘的路径：</p>



<pre class="wp-block-preformatted"><code>wsl --import docker-desktop "D:\data\docker\distro" "D:\data\docker\docker-desktop.tar" --version 2</code>
<code>wsl --import docker-desktop-data "D:\data\docker\data" "D:\data\docker\docker-desktop-data.tar" --version 2</code></pre>



<p>重新打开Docker Desktop，容器正常运行。</p>



<p>一切OK之后，可以把导出的docker-desktop.tar和docker-desktop-data.tar两个文件删掉。</p>
<p><a rel="nofollow" href="https://wangqianhong.com/2021/07/windows%e4%bf%ae%e6%94%b9docker%e9%95%9c%e5%83%8f%e4%bd%8d%e7%bd%ae/">Windows修改Docker镜像位置</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wangqianhong.com/2021/07/windows%e4%bf%ae%e6%94%b9docker%e9%95%9c%e5%83%8f%e4%bd%8d%e7%bd%ae/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker容器连接主机上的Android手机</title>
		<link>https://wangqianhong.com/2021/01/docker%e5%ae%b9%e5%99%a8%e8%bf%9e%e6%8e%a5%e4%b8%bb%e6%9c%ba%e4%b8%8a%e7%9a%84android%e6%89%8b%e6%9c%ba/</link>
					<comments>https://wangqianhong.com/2021/01/docker%e5%ae%b9%e5%99%a8%e8%bf%9e%e6%8e%a5%e4%b8%bb%e6%9c%ba%e4%b8%8a%e7%9a%84android%e6%89%8b%e6%9c%ba/#respond</comments>
		
		<dc:creator><![CDATA[wqh_work]]></dc:creator>
		<pubDate>Tue, 26 Jan 2021 03:26:13 +0000</pubDate>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://wangqianhong.com/?p=1155</guid>

					<description><![CDATA[<p>最近在开发过程中，需要Docker容器连接主机上的Android手机，网上大部分的方法是通过&#82&#8230; <a href="https://wangqianhong.com/2021/01/docker%e5%ae%b9%e5%99%a8%e8%bf%9e%e6%8e%a5%e4%b8%bb%e6%9c%ba%e4%b8%8a%e7%9a%84android%e6%89%8b%e6%9c%ba/" class="more-link read-more" rel="bookmark">继续阅读 <span class="screen-reader-text">Docker容器连接主机上的Android手机</span><i class="fa fa-arrow-right"></i></a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2021/01/docker%e5%ae%b9%e5%99%a8%e8%bf%9e%e6%8e%a5%e4%b8%bb%e6%9c%ba%e4%b8%8a%e7%9a%84android%e6%89%8b%e6%9c%ba/">Docker容器连接主机上的Android手机</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>最近在开发过程中，需要Docker容器连接主机上的Android手机，网上大部分的方法是通过&#8211;privileged -v的方法，但是这种方法主要是用在主机是Linux的情况，下面介绍一种通过WIFI，可以同时在Linux、Mac和Windows上面连接的方法。</p>



<p>假设目前主机是Windows，Docker容器跑的是Centos。</p>



<p>下载Platform-Tools的Window和Linux版本:</p>



<p><a href="https://developer.android.google.cn/studio/releases/platform-tools?hl=zh-cn" target="_blank" rel="noreferrer noopener">https://developer.android.google.cn/studio/releases/platform-tools?hl=zh-cn</a></p>



<ol><li>通过数据线连接手机，开启手机USB调试模式</li><li>在Windows上面，进入platform-tools目录，使用命令<code>./adb.exe devices</code></li><li>看到设备已经连接上之后，使用命令<code>./adb.exe tcpip 12005</code></li><li><code>./adb.exe connect <span class="has-inline-color has-vivid-red-color">192.168.0.4</span>:12005</code>（红色替换成手机的局域网IP）</li><li><code>./adb.exe devices</code> 会看到2个设备，一个是通过USB，一个是通过WIFI</li><li><code>./adb.exe kill-server</code> 关掉Windows上面的服务</li><li>打开Centos容器，进入platform-tools目录，使用命令<code>./adb connect 192.168.0.4:12005</code></li><li><code>./adb devices</code> 就可以看到通过WIFI连接的设备了</li><li>以后连接只需要重复7，8步骤就可以了，注意手机的局域网IP可能会发生变化。</li></ol>



<p>参考链接：<a href="https://forums.docker.com/t/unable-to-access-android-usb-device-from-docker-container/21781" target="_blank" rel="noreferrer noopener">https://forums.docker.com/t/unable-to-access-android-usb-device-from-docker-container/21781</a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2021/01/docker%e5%ae%b9%e5%99%a8%e8%bf%9e%e6%8e%a5%e4%b8%bb%e6%9c%ba%e4%b8%8a%e7%9a%84android%e6%89%8b%e6%9c%ba/">Docker容器连接主机上的Android手机</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wangqianhong.com/2021/01/docker%e5%ae%b9%e5%99%a8%e8%bf%9e%e6%8e%a5%e4%b8%bb%e6%9c%ba%e4%b8%8a%e7%9a%84android%e6%89%8b%e6%9c%ba/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Linux安装Docker</title>
		<link>https://wangqianhong.com/2020/09/centos8%e5%ae%89%e8%a3%85docker/</link>
					<comments>https://wangqianhong.com/2020/09/centos8%e5%ae%89%e8%a3%85docker/#comments</comments>
		
		<dc:creator><![CDATA[wqh_work]]></dc:creator>
		<pubDate>Sun, 13 Sep 2020 23:22:37 +0000</pubDate>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[Centos]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://wangqianhong.com/?p=193</guid>

					<description><![CDATA[<p>前面我们介绍了Win10下面如何安装Docker，这篇主要介绍Linux下面的安装。 卸载旧版本 安&#8230; <a href="https://wangqianhong.com/2020/09/centos8%e5%ae%89%e8%a3%85docker/" class="more-link read-more" rel="bookmark">继续阅读 <span class="screen-reader-text">Linux安装Docker</span><i class="fa fa-arrow-right"></i></a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2020/09/centos8%e5%ae%89%e8%a3%85docker/">Linux安装Docker</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p id="block-6bfe58da-01be-4702-a818-c906c065666c">前面我们介绍了Win10下面如何安装Docker，这篇主要介绍Linux下面的安装。</p>



<h3 id="block-8631bb93-4a34-437a-9444-48d2405c323c">卸载旧版本</h3>



<pre id="block-d9d14043-ada6-4f22-856a-5b5a00bdbc23" class="wp-block-code"><code>yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine</code></pre>



<h3 id="block-5e4acf53-79df-468e-bce1-f0cc10940ebd">安装依赖包</h3>



<pre id="block-3dfb0382-93cd-43ea-b107-9ce9baee28d3" class="wp-block-code"><code>yum install -y yum-utils</code></pre>



<h3 id="block-1685e0ff-ddd1-47c3-b621-bfab2934f66c">安装镜像源</h3>



<pre id="block-e16f4683-8b99-41e1-95b3-ce1679945fe7" class="wp-block-code"><code>yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo</code></pre>



<h3 id="block-0e708715-02be-43d0-b66d-e85f1c2f60e7">安装Docker</h3>



<pre id="block-4de129cb-c05b-4189-b65f-c08596482ece" class="wp-block-code"><code>yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</code></pre>



<p id="block-8ce5313b-154b-4115-9f43-b4149b0c9781">安装镜像源之后，如果不能直接安装docker，可能是因为新版的docker对containerd.io版本要求比较高，而centos里面自带的版本比较低，这里需要我们安装containerd.io比较高的版本；如果直接安装完成，就跳过。</p>



<pre id="block-ec42f25c-39ef-4254-a603-174d986581ac" class="wp-block-code"><code>yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm</code></pre>



<p id="block-0adeb2c3-47c4-4c77-9bae-d92fa580d284">安装完成之后，使用命令启动：</p>



<pre id="block-bc57bc37-849d-4a01-9a2a-c7bfe32b493d" class="wp-block-code"><code>systemctl start docker</code></pre>



<p id="block-b1e6539b-b88e-45d9-b82f-3aa999ee09a6">我们需要赋予普通用户使用docker命令的权限，否则docker命令只能root账号使用。</p>



<pre id="block-adcf2736-aebd-4c75-8fd8-6be2e28d6dbf" class="wp-block-code"><code>usermod -aG docker your_account_name</code></pre>



<h3>卸载Docker</h3>



<p>卸载命令：</p>



<pre class="wp-block-code"><code>yum remove docker-ce docker-ce-cli containerd.io .io docker-buildx-plugin docker-compose-plugin</code></pre>



<p>硬盘上的映像、容器、卷或自定义配置文件不会自动删除。要删除所有图像、容器和卷，请执行以下操作：</p>



<pre class="wp-block-code"><code>rm -rf /var/lib/docker
rm -rf /var/lib/containerd</code></pre>



<h3>Centos8</h3>



<pre class="wp-block-preformatted">Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist</pre>



<p>CentOS 8已于2021年12月31日寿终正非，但软件包仍在官方镜像上保留了一段时间，现在他们被转移到https://vault.centos.org。</p>



<p>如果仍然需要运行CentOS 8，可以在/etc/yum.repos.d中更新一下源。使用vault.centos.org代替mirror.centos.org：</p>



<pre class="wp-block-code"><code>$ sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*
$ sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*</code></pre>



<h3>Debian</h3>



<p>基本组件安装：</p>



<pre class="wp-block-preformatted">Add Docker's official GPG key:
<code>sudo apt-get update</code>
<code>sudo apt-get install ca-certificates curl</code>
<code>sudo install -m 0755 -d /etc/apt/keyrings</code>
<code>sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc</code>
<code>sudo chmod a+r /etc/apt/keyrings/docker.asc</code>
Add the repository to Apt sources:
<code>echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release &amp;&amp; echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null</code>
<code>sudo apt-get update</code></pre>



<p>安装docker:</p>



<pre class="wp-block-code"><code>sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</code></pre>



<p>增加普通用户权限</p>



<pre class="wp-block-code"><code> /usr/sbin/usermod -aG docker 普通账户</code></pre>
<p><a rel="nofollow" href="https://wangqianhong.com/2020/09/centos8%e5%ae%89%e8%a3%85docker/">Linux安装Docker</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wangqianhong.com/2020/09/centos8%e5%ae%89%e8%a3%85docker/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Win10使用Docker安装Centos</title>
		<link>https://wangqianhong.com/2020/09/win10%e4%bd%bf%e7%94%a8docker%e8%b7%91centos/</link>
					<comments>https://wangqianhong.com/2020/09/win10%e4%bd%bf%e7%94%a8docker%e8%b7%91centos/#respond</comments>
		
		<dc:creator><![CDATA[wqh_work]]></dc:creator>
		<pubDate>Mon, 07 Sep 2020 04:58:35 +0000</pubDate>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[Centos]]></category>
		<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://wangqianhong.com/?p=133</guid>

					<description><![CDATA[<p>下载Docker https://download.docker.com/win/stable/Do&#8230; <a href="https://wangqianhong.com/2020/09/win10%e4%bd%bf%e7%94%a8docker%e8%b7%91centos/" class="more-link read-more" rel="bookmark">继续阅读 <span class="screen-reader-text">Win10使用Docker安装Centos</span><i class="fa fa-arrow-right"></i></a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2020/09/win10%e4%bd%bf%e7%94%a8docker%e8%b7%91centos/">Win10使用Docker安装Centos</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<h3>下载Docker</h3>



<p><a href="https://download.docker.com/win/stable/Docker%20Desktop%20Installer.exe" target="_blank" rel="noreferrer noopener">https://download.docker.com/win/stable/Docker%20Desktop%20Installer.exe</a></p>



<p>Docker对Win系统是有要求的，必须是专业版，企业版或教育版（内部版本16299或更高版本）；因为家庭版并没有安装Hyper-V。</p>



<p>如果你的Win系统是家庭版，请参考：</p>



<p><a href="https://docs.docker.com/docker-for-windows/install-windows-home" target="_blank" rel="noreferrer noopener">https://docs.docker.com/docker-for-windows/install-windows-home</a></p>



<h3>安装Docker</h3>



<p>双击运行Docker Desktop Installer.exe，界面上有2个选项：</p>



<pre class="wp-block-verse">Enable Hyper-V Windows Features （配置Hyper-V虚拟机，必选）
Add Shortcut to desktop（在桌面上安装图标，可选）</pre>



<p>安装直接默认选择，点击OK</p>



<p>安装成功之后，点击Close关闭。</p>



<p>有的小伙伴可能是第一次配置Hyper-V，所以需要重启电脑。</p>



<p>最新的windows版本不再使用Hyper-V，而是使用wsl2，详细信息请查看链接：<a href="https://docs.microsoft.com/zh-cn/windows/wsl/install-win10" target="_blank" rel="noreferrer noopener">https://docs.microsoft.com/zh-cn/windows/wsl/install-win10</a></p>



<h3>运行Docker</h3>



<p>双击打开桌面上的Docker Desktop，等待Docker图标从Docker is starting变成Docker is running。</p>



<p>修改Docker镜像源，右击Docker图标，选择Settings。</p>



<p>如果你不想Docker在开机的时候启动，选中General选项，取消&#8221;Start Docker Desktop when you log in&#8221;的选中状态。</p>



<p>选中Docker Engine选项，修改其中的的registry-mirrors，增加2个国内的镜像源：</p>



<pre class="wp-block-code"><code>"registry-mirrors": &#91;
    "https://registry.docker-cn.com",
    "http://docker.mirrors.ustc.edu.cn"
  ],</code></pre>



<p>修改完成之后，需要点击界面右下角的&#8221;Apply &amp; Restart&#8221;按钮。</p>



<h3>获取Centos镜像</h3>



<p>打开命令提示符，可以通过快捷键Win+R，输入cmd回车即可。</p>



<p>在打开的命令提示符中，输入下面的命令可以查看centos所有的镜像：</p>



<pre class="wp-block-code"><code>docker search centos</code></pre>



<p>可以看到命令会返回很多的镜像，其中OFFICIAL一栏中如果有[OK]标签的，就表示这是官方提供的镜像：</p>



<figure class="wp-block-image size-large"><img src="https://wangqianhong.com/wp-content/uploads/2020/09/image-4-1024x398-1.png" alt="" class="wp-image-207"/></figure>



<p>我们可以通过NAME下载对应的镜像文件：</p>



<pre class="wp-block-code"><code>docker pull centos</code></pre>



<p>这下载的是centos最新版本，如果想下载其他版本，可以通过指定版本号：</p>



<pre class="wp-block-code"><code>docker pull centos:7.6.1810</code></pre>



<p>镜像的版本号可以在<a href="https://hub.docker.com/_/centos" target="_blank" rel="noreferrer noopener">https://hub.docker.com/_/centos</a>中查看</p>



<p>等待下载完成之后，可以用image命令查看所以本地镜像：</p>



<pre class="wp-block-code"><code>docker image ls -a</code></pre>



<h3>运行容器</h3>



<p>镜像下载之后，可以通过run命令运行容器</p>



<p>docker run -p 8922:22 -p 8936:3306  &#8211;privileged -td centos:latest /usr/sbin/init</p>



<p>-p 8922:22的意思就是把本地的8922端口映射成centos上的22端口。</p>



<p>&#8211;privileged的意思是使容器内的root拥有真正的root权限，否则容器内的root只是外部的一个普通用户权限；privileged启动的容器，可以看到很多host上的设备，并且可以执行mount；甚至允许你在docker容器中启动docker容器。</p>



<p>-td的意思是使容器成为一个后台服务。</p>



<p>centos:latest是REPOSITORY:TAG：</p>



<figure class="wp-block-image size-large"><img src="https://wangqianhong.com/wp-content/uploads/2020/09/image-6-1024x98-1.png" alt="" class="wp-image-208"/></figure>



<p>/usr/sbin/init是容器启动的时候使用的命令。</p>



<h3>管理容器</h3>



<p>可以通过ps命令查看所有的窗口：</p>



<pre class="wp-block-code"><code>docker ps -a</code></pre>



<figure class="wp-block-image size-large"><img src="https://wangqianhong.com/wp-content/uploads/2020/09/image-7-1024x64-1.png" alt="" class="wp-image-209"/></figure>



<p>这里的CONTAINER ID很重要，后续对应容器的操作都需要通过容器ID。</p>



<p>进入容器可以使用命令exec：</p>



<pre class="wp-block-code"><code>docker exec -it 容器ID /bin/bash</code></pre>



<p>进入容器之后，需要安装openssh-server来使用sshd：</p>



<pre class="wp-block-code"><code>yum install openssh-server passwd
systemctl start sshd</code></pre>



<p>开启sshd之后，就可以通过XShell等客户端工具登录了。</p>



<p>容器启动之后，可以通过stop命令关闭：</p>



<pre class="wp-block-code"><code>docker stop 容器ID</code></pre>



<p>可以通过start命令启动：</p>



<pre class="wp-block-code"><code>docker start 容器ID</code></pre>



<p>删除使用rm命令：</p>



<pre class="wp-block-code"><code>docker rm 容器ID</code></pre>



<p>rm命令也可以用来删除对应的镜像，如果要删除镜像，需要先把镜像对应的容器全部删掉之后，才可以删除镜像。</p>



<pre class="wp-block-code"><code>docker image rm 镜像ID</code></pre>



<h3>容器的导入导出</h3>



<p>docker有很多优点，其中之一就是可以通过导入导出功能，实现环境的迁移。</p>



<p>想想平时我们为了搭建一个本地的开发环境，需要安装各种开发包，要写各种配置文件；等到了发布的时候，又要在服务器上搭建一套同样的环境，想一想就痛苦，而docker为我们完美的解决了这个问题。</p>



<p>通过export命令导出：</p>



<pre class="wp-block-code"><code>docker export 容器ID > you_name.tar</code></pre>



<p>导出包之后可以直接上传到服务器上，通过import命令导入docker中：</p>



<pre class="wp-block-code"><code>docker import you_name.tar REPOSITORY:TAG</code></pre>



<p>这里的REPOSITORY:TAG你可以自定义，例如定义成centos:wqh，这样就可以在docker run的时候直接使用centos:wqh。</p>



<p>导入成功之后，你就可以在image中看到你的镜像，之后就可以直接run起来了：</p>



<pre class="wp-block-code"><code>docker run -p 8922:22 -p 8936:3306  --privileged -td centos:wqh /usr/sbin/init</code></pre>
<p><a rel="nofollow" href="https://wangqianhong.com/2020/09/win10%e4%bd%bf%e7%94%a8docker%e8%b7%91centos/">Win10使用Docker安装Centos</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wangqianhong.com/2020/09/win10%e4%bd%bf%e7%94%a8docker%e8%b7%91centos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
