• docker基本命令


    Docker基础命令

      PS:  在以下命令中要注意下面5个名字代表的含义

         1. imageId: 镜像ID

         2. imageName: 镜像名字

         3. containerId:  容器ID

         4. containerName: 容器名字

         5. fileName: 文件名

    • 安装docker

    yum install docker
    • 查看是否安装成功

    docker info 
    # 或者
    docker version
    • 换源 

      vi /etc/docker/daemon.json
      # 增加
     {
        "registry-mirrors": ["https://3zfwxe4j.mirror.aliyuncs.com"]
      }
     # 重启
      systemctl restart docker
    • 登录dockerHub

    docker login docker.io
    • 查找镜像
    docker search imageName(镜像名)
    • 下载镜像
    docker pull imageName(镜像名)
    • 上传镜像

    docker push docker.io/username/imageName(镜像名)
    • 改镜像名

    docker tag imageId(镜像id) docker.io/zhengquantao/imageName(新镜像名)
    • 查看镜像

    docker images
    • 查看所有容器名

    # 查看正在运行容器
    docker ps
    # 查看所有容器,包含停止的容器
    docker ps -a
    • 运行容器

    # 运行进入容器
    docker run -it zhengquantao/alipine:21.2.23 bash
    # 运行容器,停止自动删除容器 --rm
    docker run --rm --name mynginx -p:8001:80 -d zhengquantao/nginx:v1
    # 运行容器,挂载文件 -v
    docker run --rm --name mynginx_baidu -d -p 8003:80 -v D:/dockerImage:/usr/share/nginx/html zhengquantao/nginx:v1
    # 运行容器,传入环境名 -e
    docker run --rm --name mynginx_baidu -d -p 8003:80 -e IP="http://www.baidu.com" -v D:/dockerImage:/usr/share/nginx/html zhengquantao/nginx:v1
    # 运行容器,关联多个容器 --link
    docker run --name waterland -p 8003:8003 -p 8004:8004 -p 8188:8188 --link mysql:my-mysql -v /root/waterland-cms-bn:/app waterland:v1
    • 进入正在运行的容器

    docker exec -it containId /bin/bash
    • 停止、开始、重启容器
    docker stop/start/restart containerId(容器ip/名字) 
    • 提交容器成镜像
    docker commit -p containId imageName(新名字)
    • 删除容器

    docker rm -f containerId
    • 删除镜像
    docker rmi imageId
    • 查看日志
    docker logs -f containerId
    • 重定向输入日志
    docker run containerId(名字) 2>&1 >> /dev/null 
    • 复制文件到指定容器
    docker cp waterland.sql containerId:/waterland.sql
    •  MySQL导出数据
    docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
    •  MySQL导入数据
    docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql
    • 导出镜像
    docker save -o fileName.tar imageId
    • 导入镜像
    docker load < fileName.tar
    •  导出容器
    docker export fileName.tar containerId
    • 导入容器
    docker import fileName.tar containerName
    • 构建
    docker build -t zhengquantao/imageName .
    • Dockerfile
    FROM zhengquantao/python-nginx:3.8
    
    # 创建工作路径
    RUN mkdir /app
    
    COPY . /app
    
    # 指定容器启动时执行的命令都在app目录下执行
    WORKDIR /app
    
    
    # 替换nginx的配置
    COPY nginx.conf /etc/nginx/nginx.conf
    
    # 添加证书文件
    # COPY cert /etc/nginx/cert
    
    
    # 升级pip
    RUN pip3 install --upgrade pip -i  https://mirrors.aliyun.com/pypi/simple
    
    
    # pip读取requirements.txt内容安装所需的库
    RUN pip3 install -r requirements.txt -i  https://mirrors.aliyun.com/pypi/simple
    
    # PORT
    #EXPOSE 8000
    #EXPOSE 8001
    #EXPOSE 8135
    #EXPOSE 8134
    
    
    # 启动nginx和uwsgi,这里一定要加上-g,主要目的就是设置pid=1。因为docker 容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的依据,如果pid=1的程序挂了,那容器就挂了。
    #ENTRYPOINT ["nginx"]
    CMD bash /app/env.sh
    ENTRYPOINT nginx -g "daemon off;" && uwsgi -i uwsgi.ini
    • docker-compose.yml
    version: '3'
    services:
      mysql:
        build: ./mysql
        ports: 
          - "3306:3306"
        environment:
          - MYSQL_ROOT_PASSWORD=123456
        restart: always
      flask:
        build: ./flask
        ports:
         - "5000:5000"
        volumes:
          - ":"
        links: 
         - mysql:mysql
        restart: always
    • env.sh
    #!/usr/bin/env sh
    find '/app/admin/dist/js' -name '*.js' -exec sed -i -e 's/baseURL=".*"/baseURL="$IP"/g' {} ;
    find '/app/client/dist/js' -name '*.js' -exec sed -i -e 's/baseURL=".*"/baseURL="$IP"/g' {} ;

    Docker高级操作

    • -e  环境变量

           docker技术之所以这么流行 比其他容器技术更加受欢迎 很大一部分原因是 可以在运行时传入环境变量 -e  ,通过这个传入环境变量用户可以在不改变任何代码的情况下  可以配置程序, 真正实现一套代码多端运行。举个列子,一个前后端分离的项目。前端vue.js,后端 goland等其他语言。当这个项目在这个服务器上运行没有问题,当你需要迁移到其他服务器时,前端就要更改请求IP重新打包。这样就变得异常繁琐。这时候你通过-e 转入请求IP 就避免了重新打包。可以-e 使你的程序更加灵活。

    • -v 挂载数据

      绑定本地数据到docker容器之中,本地数据变化 相应的docker中数据也跟着变化。一般用于本地开发

    此时此刻,非我莫属
  • 相关阅读:
    读写文件print函数操作
    协程相关
    线程池
    多线程条件
    ibm动态测试
    ubuntu 之 搜狗拼音安装
    Linux 安装 出现Could not get lock /var/lib/dpkg/lock
    Sql server
    maven 搭建
    EOS
  • 原文地址:https://www.cnblogs.com/taozhengquan/p/docker.html
Copyright © 2020-2023  润新知