> 文档中心 > 【云原生】-Docker容器技术小结

【云原生】-Docker容器技术小结


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

文章目录

  • 前言
    • ⛳️ 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容器启动后添加端口映射

前言

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


⛳️ 1.什么是Docker?

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

在这里插入图片描述

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

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

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
https://download.docker.com/linux/centos/docker-ce.repo
[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常用命令

📢📢📢 国内镜像:https://hub.daocloud.io/
【云原生】-Docker容器技术小结
📢📢📢 官方镜像 https://hub.docker.com
【云原生】-Docker容器技术小结

✨ 3.1 创建容器

#从网络拉取镜像docker pull centos:7.8.2003
# 创建一个容器,包括了 CentOS 7.8 运行的一些基础环境#docker images   --镜像REPOSITORY     TAG IMAGE IDCREATED SIZEdaocloud.io/library/centos   8.2.2004   831691599b88   7 months ago   215MBcentos  7.8.2003   afb6fca791e0   8 months ago   203MBdocker 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

✨ 3.2 进入容器

docker exec -it centos7.8 bashdocker exec -it centos8.2 bashcat /etc/redhat-release    --查看系统版本#制作镜像docker commit centos7.8 centos7.8_test:1.0    --名称+版本号

✨ 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  --重启所有的dockerdocker 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.8sudo 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 容器名字查看所有容器内ipdocker inspect --format='{{.NetworkSettings.IPAddress}}' $(docker ps -a -q)

⛳️ 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

⛳️ 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

【云原生】-Docker容器技术小结

✨ 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

✨ 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
执行成功之后启动容器然后查看容器运行状态就可以看到新增加的端口在映射关系里已存在。
同理也可以去除端口映射。

在这里插入图片描述