天天看点

docker 基础及进阶命令单章

docker 基础及进阶命令单章

    • 一:docker源
      • centos7 yum源安装
      • docker yum源安装
    • 二、环境初始化
      • a、docekr环境
      • b、服务器环境
    • 三、docker基础命令操作
    • 四、docker进阶操作
      • 注:docker部署可视化容器
      • 1.部署redis中间件
      • 2.打包docker镜像
      • 3.docker构建镜像
      • 4.两个服务器之间docker实现相互通信,组件集群
        • a、初始化Swarm:
        • b、添加工作节点:
        • c、创建网络:
        • d、启动服务:
        • e、连接到服务:
      • 5、某个工作节点从集群中删除
        • a、从 Swarm 集群中移除节点:在 Swarm 集群的管理节点上运行以下命令,将指定节点从 Swarm 集群中移除:
        • b、在节点上停止所有服务:在要删除的节点上运行以下命令,停止所有在该节点上运行的服务:
        • c、停止节点上的 Docker 引擎:在要删除的节点上运行以下命令,停止 Docker 引擎:
        • d、删除节点:在要删除的节点上运行以下命令,删除节点:
      • 6、docker service 根据docker-compose.yml创建集群
        • a、准备 docker-compose.yml 文件。
        • b、查看服务栈的状态:
        • c、查看服务栈的服务:

一: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   (ver20.10.7、1.4.6)

#立即启用docker并开机自启
systemctl enable docker --now

#docker镜像国内加速、阿里云可申请
vim /etc/docker/daemon.json
  {
  “registry-mirrors": ["https://4xgbe4ey.mirror.aliyuncs.com"]
  }
  systemctl  daemon-reload
           

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
           

三、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
##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部署可视化容器

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中间件

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   #(自定义启动命令\指定容器内配置文件)
           

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容器通信的步骤:

a、初始化Swarm:

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

docker swarm init --advertise-addr  192.168.174.130
manager-ip是当前服务器的IP地址。
           
docker 基础及进阶命令单章

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集群。

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

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 集群中删除可能会对集群的可用性产生影响,因此在执行此操作之前应该先进行充分的计划和测试。

6、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 官方文档的相关部分。