IT七剑客 IT七剑客
首页
wresource
郭霖
孤寒者
IT邦德
沉默王二
老麦
stackoverflow
GitHub (opens new window)
首页
wresource
郭霖
孤寒者
IT邦德
沉默王二
老麦
stackoverflow
GitHub (opens new window)
  • 基础数据库文章

    • Docker容器迁移Oracle到MySQL
    • PostgreSQL大总结
    • 想学明白MySQL,得先捋一捋核心的文件
    • Oracle超全SQL,细节狂魔
    • MySQL8.0新特性抢先看,性能又双叒提升了
    • Docker大总结
      • ⛳️ 1.什么是Docker?
      • ⛳️ 2.安装Docker
        • ✨ 2.1 安装依赖包
        • ✨ 2.2 启动 Docker
        • ✨ 2.3 修改Docker存储位置
      • ⛳️ 3.Docker常用命令
        • ✨ 3.1 创建容器
        • ✨ 3.2 进入容器
        • ✨ 3.3 其他
      • ⛳️ 4.Docker卸载
      • ⛳️ 5.Docker日常运维
        • ✨ 5.1 如何上传镜像到容器
        • ✨ 5.2 docker 创建容器时指定容器ip
        • ✨ 5.3 docker容器启动后添加端口映射
    • BI 系统中看似很冗余的快照表存在的意义
  • IT邦德 数据库
  • 基础数据库文章
IT邦德
2023-01-13
目录

Docker大总结

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情 (opens new window)

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA工作经验 一位上进心十足的【大数据领域博主】!😜😜😜 中国DBA联盟(ACDU)成员,目前从事DBA及程序编程 擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。 ✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞 ❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

摘要:以下为本人当年初学Docker时做的笔记,一直在更新中,囊括了基本的知识点,有时还翻出来查查,是不是干货,就看亲们了。

# ⛳️ 1.什么是Docker?

可以简单认为,容器是一个超级轻量级的虚拟机(主机),容器和容器之间的进程是相互隔离的。

在这里插入图片描述

Docker 利用容器(Container)独立运行的一个或一组应用。 容器是用镜像创建的运行实例。 它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等) 和运行在其中的应用程序。容器的定义和镜像几乎一模一样, 也是一堆层的统一视角, 唯一区别在于容器的最上面那一层是可读可写的。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。 最大的公开仓库是 Docker Hub: hub.docker.com,存放了数量庞大的镜像供用户下载。 (opens new window) 国内的公开仓库包括阿里云 、网易云等

Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。 Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上, 要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本CentOS 7 的内核一般都是3.10的, 而CentOS 6.X 的内核一般都是2.6, 在2.6的内核下,Docker运行会比较卡,所以一般会选择升级到3.10版本。

# ⛳️ 2.安装Docker

# ✨ 2.1 安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo download.docker.com/linux/cento… (opens new window) [root@centos7 ~] yum -y install docker-ce docker-ce-cli containerd.io

# ✨ 2.2 启动 Docker

[root@centos7 ~]# systemctl enable docker [root@centos7 ~]# systemctl start docker [root@centos7 ~]# systemctl status docker

在这里插入图片描述

# ✨ 2.3 修改Docker存储位置

默认情况下 Docker的存放位置为:/var/lib/docker 可以通过命令查看具体位置:docker info | grep "Docker Root Dir" 首先停掉 Docker 服务: systemctl stop docker 然后移动整个/var/lib/docker 目录到目的路径 mkdir -p /root/data mv /var/lib/docker /root/data/docker ln -s /root/data/docker /var/lib/docker --快捷方式

# ⛳️ 3.Docker常用命令

📢📢📢 国内镜像:hub.daocloud.io/ (opens new window) 在这里插入图片描述 📢📢📢 官方镜像 hub.docker.com (opens new window) 在这里插入图片描述

# ✨ 3.1 创建容器

#从网络拉取镜像
docker pull centos:7.8.2003
复制代码
# 创建一个容器,包括了 CentOS 7.8 运行的一些基础环境
#docker images   --镜像
REPOSITORY                   TAG        IMAGE ID       CREATED        SIZE
daocloud.io/library/centos   8.2.2004   831691599b88   7 months ago   215MB
centos                       7.8.2003   afb6fca791e0   8 months ago   203MB

docker run -d --name centos7.8 -h centos7.8 \
-p 220:22 -p 3387:3389 \
--privileged=true \
centos:7.8.2003 /usr/sbin/init

#我想拥有一个 linux 8.2 的环境
docker run -d --name centos8.2 -h centos8.2 \
-p 230:22 -p 3386:3389 \
--privileged=true \
daocloud.io/library/centos:8.2.2004 init
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# ✨ 3.2 进入容器

docker exec -it centos7.8 bash
docker exec -it centos8.2 bash
cat /etc/redhat-release    --查看系统版本

#制作镜像
docker commit centos7.8 centos7.8_test:1.0    --名称+版本号
复制代码
1
2
3
4
5
6
7

# ✨ 3.3 其他

docker ps  --查询容器
docker rm -f *****   --删除容器(可以删除多个)
docker rmi  mysql:1.0  --删除镜像
docker images   --镜像
docker images | grep centos   --查询镜像
镜像可以导入,也可以导入,用于生产环境
docker cp ***** centos7.8:/    --把宿主机的文件拷贝到docker容器中
docker stop centos7.8  --停止容器
systemctl restart docker  --重启所有的docker
docker search ubuntu   --查询是否有镜像
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"   --格式化查询
docker network connect *** MHA-MES-Master1-ip131   --添加指定的网卡
docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt     --拷贝容器的内容到宿主机
docker ps | grep -i mh  --过滤查询
如果创建时未指定 --restart=always ,可通过update 命令:docker update --restart=always centos7.8

sudo docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
sudo docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
docker container update --restart=always 容器名字

查看所有容器内ip
docker inspect --format='{{.NetworkSettings.IPAddress}}' $(docker ps -a -q)
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# ⛳️ 4.Docker卸载

查看已安装的docker
yum list installed | grep docker
运行之后显示如下:
[root@docker ~]# yum list installed | grep docker
containerd.io.x86_64                        1.4.3-3.1.el7               @docker-ce-stable
docker-ce.x86_64                            3:20.10.2-3.el7            @docker-ce-stable
docker-ce-cli.x86_64                        1:20.10.2-3.el7           @docker-ce-stable
docker-ce-rootless-extras.x86_64    20.10.2-3.el7              @docker-ce-stable
依次删除:
yum -y remove docker-ce.x86_64
yum -y remove docker-ce-cli.x86_64
yum -y remove containerd.io.x86_64
接着删除docker储存的文件、镜像、容器...,该文件存放在 /var/lib/docker 目录下:
rm -rf /var/lib/docker
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# ⛳️ 5.Docker日常运维

# ✨ 5.1 如何上传镜像到容器

--停止容器
[root@jeames ~]# docker stop jemora11203
--从容器创建一个新的镜像
docker commit jemora11203 jemora11g:11203  
[root@jeames ~]# docker images
--用镜像制作tag
docker tag jemora11g:11203 techerwang/oracle:ora11g11203
--上传至官网
docker push techerwang/oracle:ora11g11203
复制代码
1
2
3
4
5
6
7
8
9
10

在这里插入图片描述

# ✨ 5.2 docker 创建容器时指定容器ip

Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定。
在实际部署中,我们需要指定容器ip,不允许其自行分配ip,尤其是搭建集群时,固定ip是必须的。
我们可以创建自己的bridge网络 : mynet,创建容器的时候指定网络为mynet并指定ip即可
[root@docker ~]# docker network ls   -- 查看网络模式
[root@docker ~]# docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.1.1 mynet   -- 创建一个新的bridge网络
[root@docker ~]# docker network inspect mynet   --查看网络信息
创建容器并指定容器ip
[root@docker ~]# docker run -d --name mysqlhost02 -h mysqlhost02 \
-p 223:22 -p 3407:3306 \
--network=mynet --ip 172.18.12.1 \
--privileged=true \
centos:7.6.1810 /usr/sbin/init
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13

# ✨ 5.3 docker容器启动后添加端口映射

#查看NAT表中的PREROUTING链
[root@centos7 ~]# iptables -t nat --list-rules PREROUTING
-P PREROUTING ACCEPT
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
iptables -t nat -A  DOCKER -p tcp --dport 3316 -j DNAT --to-destination 172.17.0.3:3306
从上面可以看出,iptables将满足条件的数据都转发到了DOCKER链上去了。
#查看NAT表中的DOCKER链
iptables -t nat --list-rules DOCKER
另外一个方法
docker容器被创建后会在服务器上保存一个文件夹,
配置文件也放在此处,解决方法就是找到映射段都得配置文件修改就行了。
修改之前先停掉docker
$ systemcel stop docker
在 /var/lib/docker/containers/[容器ID]/下找到hostconfig.json
找到映射IP的位置,复制一个已映射的IP,修改为自己需要的就好(888是我新增的)
"PortBindings": {
    "888/tcp": [
      {
        "HostIp": "",
        "HostPort": "888"
      }
    ],
    "21/tcp": [
      {
        "HostIp": "",
        "HostPort": "21"
      }
    ]
}
相同的目录下找到config.v2.json,修改2处
"ExposedPorts": {
  "888/tcp": {},
  "21/tcp": {}
}
"Ports": {
    "888/tcp": [
        {
          "HostIp": "0.0.0.0",
          "HostPort": "888"
        }
    ],
    "21/tcp": [
        {
          "HostIp": "0.0.0.0",
          "HostPort": "21"
        }
    ]
}
修改完之后启动docker
$ systemctl start docker
执行成功之后启动容器然后查看容器运行状态就可以看到新增加的端口在映射关系里已存在。
同理也可以去除端口映射。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

在这里插入图片描述

作者:IT邦德 链接:https://juejin.cn/post/7159032212317274125 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

编辑 (opens new window)
#数据库#IT邦德
上次更新: 2023/01/22, 14:02:45
MySQL8.0新特性抢先看,性能又双叒提升了
BI 系统中看似很冗余的快照表存在的意义

← MySQL8.0新特性抢先看,性能又双叒提升了 BI 系统中看似很冗余的快照表存在的意义→

最近更新
01
Coding 102 Writing code other people can read
02-26
02
Kotlin Flow响应式编程,StateFlow和SharedFlow
02-05
03
Kotlin Flow响应式编程,操作符函数进阶
02-05
更多文章>
Theme by Vdoing | Copyright © 2022-2023 IT七剑客 | MIT License
  • 闽ICP备2021006579号-4
  • 闽公网安备 35012102500470号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式