docker的使用

2022-11-10 21:50:56 浏览数 (1)

docker安装

contos 安装

  • 安装所需的包。yum-utils提供了yum-config-manager 效用,并device-mapper-persistent-data和lvm2由需要 devicemapper存储驱动程序。

yum install -y yum-utils device-mapper-persistent-data lvm2

  • 设置稳定存储库yum源为docker源

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

  • 安装 Docker

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

Ubuntu 安装

  • 由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本
代码语言:javascript复制
 sudo apt-get remove docker docker-engine docker-ce docker.io
  • 更新apt包索引
代码语言:javascript复制
sudo apt-get update
  • 安装以下包以使apt可以通过HTTPS使用存储库(repository)
代码语言:javascript复制
 sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
  • 添加Docker官方的GPG密钥
代码语言:javascript复制
 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • 使用下面的命令来设置stable存储库
代码语言:javascript复制
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  • 再更新一下apt包索引
代码语言:javascript复制
 sudo apt-get update
  • 安装最新版本的Docker CE
代码语言:javascript复制
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
  • 修改配置文件以供远程访问

vim /usr/lib/systemd/system/docker.service

代码语言:javascript复制
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
修改为:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock

注意tcp://0.0.0.0:2375 不要这样设置不然你的服务器裂开,最好使用固定的ip

  • 配置加速

vim /etc/docker/daemon.json

  • 添加配置
代码语言:javascript复制
{"registry-mirrors":["https://registry.docker-cn.com"]}
  • 启动docker

systemctl start docker

docker的使用

  • 登录远程docker仓库

sudo docker login --username=masailog registry.cn-zhangjiakou.aliyuncs.com/epnc/epncfit

  • 查找镜像

docker search mysql:8.0

  • 导入镜像

docker load -i mysql:8.0.tar

  • 导出镜像

docker save -o mysql.tar mysql:8.0

  • 获取镜像

docker pull mysql:8.0

  • dockerflie制作镜像

docker build -t my_java_service:1.0 .

  • 制作java服务的dockerflie
代码语言:javascript复制
FROM registry.cn-shanghai.aliyuncs.com/hxtrip/hxtrip-java:latest
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY build/libs/need-sve-1.0-SNAPSHOT.jar dqgs.jar
ENV JAVA_OPTS=""
#ENV spring_cloud_config_profile="test"
EXPOSE 8888
ENTRYPOINT ["java","-Xms128m","-Xmx1024m","-Djava.security.egd=file:/dev/./urandom","-jar","dqgs.jar"]

注意事项 jar 和dockerflie需要在同级目录下面(不要放其他东西,build的时候默认会把同级目录下所有的东西都打包导镜像里面)

  • 新建网络

docker network create --driver bridge --subnet 172.168.1.0/16 --gateway 172.168.1.1 test-work

  • bridge模式(默认):网桥模式,通过虚拟网桥使容器通信。容器有自己的独立ip和端口,特点 docker 会创建docker0网桥,写入iptables规则,docker会为容器创建独有的network namespace,也会为这个命名空间配置好虚拟网卡,路由,DNS,IP地址与iptables规则。
  • host模式:主机模式,与主机共用一个网络,容器ip是主机的ip,端口占用主机的端口范围,特点容器与宿主机IP一致,网络性能高。
  • container模式:与指定容器共享一个网络,类似host模式,但是是两个容器间共用一个ip。
  • none模式:无网络模式,容器有自己的内部网络,但是没有分配ip,路由等信息,需要自己分配。 注意:bridge模式下重启防火墙,会导致容器内的服务无法连接网络,原因是在bridge模式下,docker会默认写入iptables规则,但是这些规则没有写入磁盘所以当防火墙重启后,规则丢失,容器自然无法上网。
  • 运行容器并加入自己的网络

docker run -itd --name mysql --network test-work mysql:8.0

  • 查看容器日志

docker logs --tail=1000 mysql

注意创建网络是为了方便容器之间可以通过容器名相互访问

  • 进入容器

docker exec -it e0be44c2897b(容器id) /bin/bash

  • 退出容器

exit

  • 删除容器

docker rm -rf e0be44c2897b(容器id)

容器中常用工具的安装

  • 更新下载工具(容器中没有yum)

apt-get update

  • 下载 ifconfig 工具

apt install net-tools

  • 下载 ping 工具

apt install iputils-ping

  • 下载 telnet 工具

apt install telnet

  • 下载 ssh远程连接工具

apt install openssh-server

  • 为了更方便的使用docker,提供了可视化工具portainer

docker pull portainer/portainer

  • 运行portainer

docker run -p 8001:9000 -p 8000:8000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /mydata/portainer/data:/data -d portainer/portainer

  • docker stack 的使用
代码语言:javascript复制
version: "3"
networks:
  default:
    external:
      name: "网络"
services:
  zts-gis:
    image:  "镜像"
    environment:
      TZ: Asia/Shanghai
      spring.cloud.inetutils.preferredNetworks: 10.0.1
      spring.profiles.active: "配置文件"
      spring.cloud.nacos.discovery.namespace: "命名空间"
      spring.cloud.nacos.config.namespace: "命名空间"
      JDK_JAVA_OPTIONS: -Xmx1024m -Xms512m
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.labels.env == "集群节点"
      labels:
        description: "描述"
      resources:
        limits:
          cpus: '0.50'
          memory: 1024M
        reservations:
          cpus: '0.25'
          memory: 1024M
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 2
        window: 120s
  zts-web:
    image: nginx:latest
    ports:
      - "8089:80"
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /opt/docker/data/zts/zts-web/html:/usr/share/nginx/html
      - /opt/docker/data/zts/zts-web/conf/nginx.conf:/etc/nginx/nginx.conf
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.labels.env == "集群节点"
      labels:
        description: "描述"
      resources:
        limits:
          cpus: '0.50'
          memory: 128M
        reservations:
          cpus: '0.25'
          memory: 128M
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 2
        window: 120s
  • dokcer yun 运行所带参数详解
代码语言:javascript复制
-a, --attach=[]            登录容器(必须是以docker run -d启动的容器)  
-d, --d                    后台运行容器,并返回容器ID;
-w, --workdir=""           指定容器的工作目录  
-c, --cpu-shares=0         设置容器CPU权重,在CPU共享场景使用    
-e, --env=[]               指定环境变量,容器中可以使用该环境变量    
-m, --memory=""            指定容器的内存上限    
-P, --publish-all=false    指定容器暴露的端口    
-p, --publish=[]           指定容器暴露的端口   
-h, --hostname=""          指定容器的主机名    
-v, --volume=[]            给容器挂载存储卷,挂载到容器的某个目录    
--volumes-from=[]          给容器挂载其他容器上的卷,挂载到容器的某个目录  
--cap-add=[]               添加权限,权限清单详见:http://linux.die.net/man/7/capabilities    
--cap-drop=[]              删除权限,权限清单详见:http://linux.die.net/man/7/capabilities    
--cidfile=""               运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法    
--cpuset=""                设置容器可以使用哪些CPU,此参数可以用来容器独占CPU    
--device=[]                添加主机设备给容器,相当于设备直通    
--dns=[]                   指定容器的dns服务器    
--dns-search=[]            指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件    
--entrypoint=""            覆盖image的入口点    
--env-file=[]              指定环境变量文件,文件格式为每行一个环境变量    
--expose=[]                指定容器暴露的端口,即修改镜像的暴露端口    
--link=[]                  指定容器间的关联,使用其他容器的IP、env等信息    
--lxc-conf=[]              指定容器的配置文件,只有在指定--exec-driver=lxc时使用    
--name=""                  指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字  
--net="bridge"             容器网络设置:bridge 使用docker daemon指定的网桥,host     //容器使用主机的网络,container:NAME_or_ID  >//使用其他容器的网路,共享IP和PORT等网络资源,none 容器使用自己的网络(类似--net=bridge),但是不进行配置
--privileged=false         指定容器是否为特权容器,特权容器拥有所有的capabilities    
--restart="no"             指定容器停止后的重启策略:no:容器退出时不重启,on-failure:容器故障退出(返回值非零)时重启,always:容器退出时总是重启    
--rm=false                 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)    
--sig-proxy=true           设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

注意为了防止docker重启数据丢失这里使用了 -v 参数 将容器里面的数据挂在到服务器主机上

0 人点赞