侧边栏壁纸
博主头像
zyixin

当你觉得为时已晚的时候,恰恰是最早的时候

  • 累计撰写 64 篇文章
  • 累计创建 0 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

容器操作

zyixin
2022-04-07 / 0 评论 / 0 点赞 / 1,843 阅读 / 2,574 字
温馨提示:
本文最后更新于 2022-04-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

容器卷操作

在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即 数据不随着 Container的结束而结束 ),需要将数据从宿主机挂载到容器中。

目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中;

(1)volumes:Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/Volumes目录中;(最常用的方式
(2)bind mounts:意味着可以存储在宿主机系统的任意位置;(比较常用的方式
(3)tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统;(一般不会用的方式

新卷只能在容器创建过程当中挂载
# docker run -it --name="voltest" -v /tmp:/test daocloud.io/library/centos:7 /bin/bash

共享其他容器的卷
# docker run -it --volumes-from bc4181 daocloud.io/library/centos:7 /bin/bash

实际应用中可以利用多个-v选项把宿主机上的多个目录同时共享给新建容器
比如:
# docker run -it -v /abc:/abc -v /def:/def lae9

访问容器应用-端口转发

使用端口转发解决容器端口访问问题

-p:
创建应用容器的时候,一般会做端口映射,这样是为了让外部能够访问这些容器里的应用。可以用多个-p指定多个端口映射关系。

mysql应用端口转发:
查看本地地址:
# ip a
	ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:24:ef:d3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.160.15/24 brd 192.168.160.255 scope global ens33
       valid_lft forever preferred_lft forever

运行容器:使用-p作端口转发,把本地3307转发到容器的3306,其他参数需要查看发布容器的页面提示
# docker run --name mysql1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=12 daocloud.io/library/mysql:5.7

查看IP地址:
[root@docker tmp]# docker inspect nginx1 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.3",
					
通过本地IP:192.168.160.15的3307端口访问容器mysql内的数据库,出现如下提示恭喜你
[root@docker ~]# mysql -uroot -p -h 192.168.160.15 -P3307
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 24144
Server version: 5.7.29 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 


-P:
当使用-P标记时,Docker会随机映射一个49000~49900的端口到内部容器开放的网络端口。如下:

[root@docker ~]# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
tiger/mynginx                v1                  9c18f18948a3        2 days ago          367MB
daocloud.io/library/centos   7                   b5b4d78bc90c        3 months ago        203MB


[root@docker ~]# docker run --name myredis -P -d docker.io/redis
88bf84df36a9777d2a2127036103ab2e88d67b3959885bd3d560efd4062b9478

[root@docker ~]# docker ps
88bf84df36a9	docker.io/redis		"docker-entrypoint.sh"		4 seconds ago	UP 3 seconds	0.0.0.0:32768->6379/tcp		myredis

从上面的结果中可以看到,本地主机的32768端口被映射到了redis容器的6379端口上,也就是说访问本机的32768端口即可访问容器内redis端口

测试看下,登录redis容器,随意写个数据
[root@docker ~]# docker run --rm -it --name myredis2 --link myredis:redisdb docker.io/redis /bin/bash
root@be33d955d6f4:/data# redis-cli -h redisdb -p 6379
redisdb:6379> set tiger 123
OK
redisdb:6379>

在别的机器上通过上面映射的端口32768连接这个容器的redis
# redis-cli -h 192.168.160.15 -p 32768
192.168.160.15:32768> get tiger
"123"
0

评论区