docker 基础及进阶命令单章

docker 基础及进阶命令单章

一:docker源

centos7 yum源安装

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

docker yum源安装

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

二、环境初始化

yum -y install docker-ce  docker-ce-cli containerd.io 

a、docekr环境

#安装docker
yum -y install docker-ce  docker-ce-cli containerd.io  



#docker镜像国内加速、阿里云可申请
vim /etc/docker/daemon.json
  {
  "registry-mirrors": [
  	"https://4xgbe4ey.mirror.aliyuncs.com",
    "https://registry.docker-cn.com",
    "https://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://daocloud.io",
    "https://docker.m.daocloud.io"
	],
	"exec-opts":["native.cgroupdriver=systemd"],
	"max-concurrent-downloads":10,
	"max-concurrent-uploads":5,
	"log-opts":[
		"max-size":"300m",
		"max-file":"3"
		]
	"live-restore":true
  }
  
  systemctl  daemon-reload
  
#立即启用docker并开机自启
systemctl enable docker --now

vim /etc/security/limits.conf

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

vim /etc/sysctl.conf

vm.max_map_count=262145
  1. Docker官方镜像站: https://hub.docker.com/

  2. 阿里云镜像站: https://cr.console.aliyun.com/

  3. DaoCloud镜像站: https://hub.daocloud.io/

  4. 网易云镜像站: https://hub-mirror.c.163.com/

  5. 中科大镜像站: https://mirrors.ustc.edu.cn/

  6. 清华大学镜像站: https://hub.tuna.tsinghua.edu.cn/

  7. 腾讯云镜像站: https://cloud.tencent.com/document/product/457/9117

b、服务器环境

#停止防火墙
systemctl stop firewalld
systemctl disable firewalld

# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sed -i 's/^SELINUX=disabled$/SELINUX=permissive/' /etc/selinux/config ()

#关闭swap
swapoff -a  
sed -ri 's/.*swap.*/#&/' /etc/fstab

modprobe br_netfilter

cat /etc/sysconfig/modules/br_netfilter.modules
modprobe br_netfilter


cat << EOF > /etc/sysctl.d/docker.conf
vm.max_map_count=262144
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sysctl -p

三、docker基础命令操作

#容器运行命令
docker run  --name=zidingyi   -d(后台)  --restart=always(开机自启) -p(映射)  88(主机):80(容器)   images

#挂载数据到外部修改(主机目录为空,容器内同为空)
docker run  --name=zidingyi   -d(后台) \
--restart=always(开机自启) -p(映射)  88(主机):80(容器)\
-v  主机目录:容器目录:ro(容器内只读、rw)   images

#查看正在运行中的
docker ps
#查看所有
docker ps -a
#删除停止/强制删除运行的容器
docker rmi/rm -f images/id
#停止/启动容器
docker  stop/start  iamges
#更新配置
docker update  images  --restart=always
#交互式容器命令
docker exec -it  id   /bin/bash或/bin/sh
#容器提交改变(修改好)可生成一个新镜像
docker commit  -a (作者) -m "变化标签"  image_id   image_new_name:ver
#镜像保存传输加载(离线操作)
docker save  -o   name.tar  images:ver
docker load  -i  name.tar  

docker export  images_id > name.tar
cat name.tar | docker import - 仓库/image_name:version

#镜像推送到远程仓库
   tag 修改镜像标签,仓库/镜像:版本都可改
docker tag local-image:tagname  wangjch/images:tagname

docker login   #登录docker hub
docker push wangjch/images:tagname   #提交推送
docker logout
#公有镜像下载
docker pull  wangjch/images:tag
#查看日志排错
docker logs  image/id
#镜像的net、image、volunm 等内部细节
docker inspect  image/id
#复制容器内文件到本机
docker cp  id:容器目录   本机目录
docker cp  本机目录   id:容器目录
#/docker构建镜像
docker build  -t  java-daemon:v1.0 -f ./DockerFile
#/docker network不同服务器之间容器的互联通信以及端口映射
容器ip变动时可以通过服务名直接网络通信不受影响
docker network create net_name
docker network connect net_name container1
#同服务器下,network链接
docker run -it --network net_name  image
##虚悬镜像查看删除。
docker image ls -f dangling=true
docker image prune
删除tag为none的镜像
docker rmi -f $(docker images | grep "none" | awk '{print $3}')
##docker compose
https://docs.docker.com/compose/compose-file/
docker compose   up/down 直接创建删除
##
docker swarm 
##扩容
docker compose up --scale web=5
docker service scale myapp_web=5

# docker修改运行容器端口映射。
docker container update --publish-add 8080:80 nginx


# docker查看近期日志,倒叙限制行数
docker logs -f duoduoping-community -t --since="2023-10-11" --tail=1000

四、docker进阶操作

注:docker部署可视化容器

docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

1.部署redis、mysql中间件

docker pull redis

#docker run 使用自定义配置文件启动命令   (--privileged=true  -v挂载权限不够时)(继承--volumes-from  父类name)
#创建redis.conf配置文件
docker run -v /data/redis/redis.conf:/etc/redis/redis.conf \
-v  /data/myredis/data:/data/redis/data
-d  --name myredis \
-p 6379:6379 \
redis:latest redis-server /etc/redis/redis.conf   #(自定义启动命令\指定容器内配置文件)


docker run -p 3306:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest --lower_case_table_names=1


docker run -it -d --name mysql8 -p 3306:3306  -v /u01/mysql/my.cnf:/etc/my.cnf -v /u01/mysql/data/:/usr/lib/mysql/ -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest --lower_case_table_names=1

2.打包docker镜像

FROM  基础镜像
RUN  容器构建是需要的命令  
WORKDIR 指定创建容器后,登陆时的工作目录。
USER 指定用户 
ENV 用于构建过程中设置环境变量
ADD  将宿主机的文件拷贝进镜像且自动处理url和解压tar压缩包
COPY  拷贝文件和目录到镜像中。
VOLUME 容器卷 -v
EXPOSE  端口暴露 -p
CMD 指令会被docker run后面的指令所取代。
ENTRYPOINT 容器启动时运行的命令但不会被docker run后面的命令取代,并作为参数
微服务

Dockerfile

FROM openjdk:8-jdk-slim   ##环境
LABEL   maintainer=wangjch

#复制本地jar包到容器内
COPY  target/*.jar   /app.jar
COPY  target/*.yml   /app.yml
##ADD  app.jar   docker.jar
#镜像启动命令
ENTRYPOINT ["java" ,"-jar","app.jar"]

3.docker构建镜像

docker build  -t  name:ver -f .
#运行容器
docker run  -d -p 8080:8080  \
-v  /data/app-java/app.yml:/app.yml
 --name myjava java-daemon:v1.0
#推送到远程仓库
docker tag  java-daemon:v1.0  wangjch/java-daemon:v1.0
docker push wangjch/java-daemon:v1.0
#拉取镜像
docker pull wangjch/java-daemon:v1.0

4.两个服务器之间docker实现相互通信,组件集群

要实现不同服务器之间的Docker容器通信,可以使用Docker的Swarm模式或Kubernetes等容器编排工具来管理多个Docker守护程序的联合。

下面是使用Docker Swarm模式实现不同服务器之间的Docker容器通信的步骤:

5、查看docker容器状态

 docker stats mysql

内存/CPU使用量,网络/块设备读写I/O
在这里插入图片描述

docker top myredis

在这里插入图片描述

6、docker初始化集群搭建

a、初始化Swarm:

在一台服务器上执行以下命令来初始化Swarm:

docker swarm init --advertise-addr  192.168.174.130
manager-ip是当前服务器的IP地址。

![在这里插入图片描述](https://img-blog.csdnimg.cn/eb59dc6d719d4f1fb8dd9b1a01c53d2e.png

b、添加工作节点:

在其他服务器上执行以下命令,将它们作为工作节点加入Swarm集群:

docker swarm join --token <token> <manager-ip>:<manager-port>
<token>是在第一步初始化Swarm时生成的,<manager-ip>和<manager-port>是Swarm管理节点的IP地址和端口号。

查看是否加入集群

docker node ls
docker swarm join --token SWMTKN-1-054xiwsalfsvqt7xifo3n06n6xxzp61wu1luerwuuawo4yu2rh-5gvwzn4jv8si01etvo0bbarp8 192.168.174.130:2377
c、创建网络:

在Swarm管理节点上创建一个Overlay网络:

docker network create --driver overlay my-network-name
d、启动服务:

在Swarm集群中启动需要通信的容器,并将它们连接到同一个网络:

docker service create --network my-network --name my-service my-image
my-image是需要启动的Docker镜像名称。
e、连接到服务:

在其他服务器上的容器中,可以使用服务名称来连接到已启动的服务:

docker run -it --network my-network my-image bash
该命令将启动一个新容器,并将其连接到与my-service相同的网络中。

通过Swarm模式可以方便地实现不同服务器之间的Docker容器通信,并且可以使用Docker提供的其他功能来管理和扩展Docker集群。

7、某个工作节点从集群中删除

a、从 Swarm 集群中移除节点:在 Swarm 集群的管理节点上运行以下命令,将指定节点从 Swarm 集群中移除:
$ docker node rm <node-name>

其中 是要移除的节点的名称或 ID。

b、在节点上停止所有服务:在要删除的节点上运行以下命令,停止所有在该节点上运行的服务:
$ docker service ls | grep <node-name> | awk '{print $1}' | xargs docker service rm

其中 是要删除的节点的名称或 ID。

c、停止节点上的 Docker 引擎:在要删除的节点上运行以下命令,停止 Docker 引擎:
systemctl stop docker
d、删除节点:在要删除的节点上运行以下命令,删除节点:
docker swarm leave

这将使节点离开 Swarm 集群并删除节点的本地状态。如果节点上还有容器在运行,则它们将继续在节点上运行,直到手动停止它们。

需要注意的是,将节点从 Swarm 集群中删除可能会对集群的可用性产生影响,因此在执行此操作之前应该先进行充分的计划和测试。

8、docker service 根据docker-compose.yml创建集群

可以使用 docker stack 命令根据 docker-compose.yml 文件在 Docker Swarm 中创建服务栈。以下是基本的步骤:

a、准备 docker-compose.yml 文件。

将 docker-compose.yml 文件上传到 Swarm 管理节点。

在 Swarm 管理节点上运行以下命令,将 docker-compose.yml 文件中定义的服务栈部署到 Swarm 集群中:

$ docker stack deploy -c docker-compose.yml <stack-name>

其中 是要创建的服务栈的名称。

b、查看服务栈的状态:
$ docker stack ls

这将显示在 Swarm 集群中部署的所有服务栈及其状态。

c、查看服务栈的服务:
$ docker stack services <stack-name>
查看容器所在的 Docker 集群节点
docker inspect -f '{{.Node.Name}}' <container_name>

这将列出在服务栈中定义的所有服务及其状态。

可以通过 docker stack 命令的其他选项和参数来配置服务栈的各种属性,例如服务数量、网络配置、容器标签等等。具体可以参考 Docker 官方文档的相关部分。

五、centos7上实现docker的安全访问-基于CA认证

idea:docker remote_api 本地打包上传

idea:设置

在这里插入图片描述

修改docker.service

ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/ca.pem  --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2376 -H fd:// --containerd=/run/containerd/containerd.sock

或者daemon.json

{

 "tlsverify":  true,
 "tlscacert": "/etc/docker/ca.pem",
 "tlscert": "/etc/docker/server-cert.pem",
 "tlskey": "/etc/docker/server-key.pem",
 "hosts": ["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],


 }

由于在公网主机进行测试,IP为真实ip假设114.114.114.111,以下内容中可将所有此IP替换成自己的IP地址。

切换目录

cd /etc/docker/

1、生成CA私钥文件ca-key.pem,设置自己的密码并输入,下面所有的密码都设为同一个

openssl genrsa -aes256 -out ca-key.pem 4096

在这里插入图片描述

2、生成CA公钥文件ca.pem,输入密码,其他的随便写/直接回车

openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

在这里插入图片描述

3、基于CA文件生成server-key.pem文件

openssl genrsa -out server-key.pem 4096

在这里插入图片描述

4、基于server-key.pem文件生成server.csr文件

openssl req -subj "/CN=${HOSTNAME}“ -sha256 -new -key server-key.pem -out server.csr

在这里插入图片描述

5、配置白名单,推荐配置0.0.0.0,允许所有IP连接但只有证书才可以连接成功

#echo subjectAltName = DNS:${HOSTNAME},IP:0.0.0.0,IP:127.0.0.1 > extfile.cnf
echo subjectAltName = DNS:${HOSTNAME},IP:114.114.114.111 > extfile.cnf

6、extendedKeyUsage属性到extfile.cnf文件

echo extendedKeyUsage = serverAuth >> extfile.cnf

7、生成签名证书server-cert.pem文件

openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf

在这里插入图片描述

8、创建客户端私钥文件key.pem

openssl genrsa -out key.pem 4096

9、基于key.pem文件生成client.csr文件

openssl req -subj '/CN=client' -new -key key.pem -out client.csr

10、输出extendedKeyUsage属性到extfile-client.cnf文件

echo extendedKeyUsage = clientAuth > extfile.cnf

11、生成签名证书cert.pem文件

openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf

在这里插入图片描述

12、删除两个csr文件和extfile文件,修改证书文件权限为只读

在这里插入图片描述

rm -v client.csr server.csr
chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem

13、客户端证书放置docker环境目录下

ca.pem
cert.pem
key.pem
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@王先生1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值