zoukankan      html  css  js  c++  java
  • Docker安装和常用命令

    Docker安装

    Docker的安装可以参考 https://docs.docker.com/ 下面的 Get Docker / Docker CE / Linux, 需要关注的主要是CentOS和Ubuntu, 可以通过添加仓库地址再通过 yum install 或 apt install安装, 也可以下载rpm包和deb包进行安装.

    方式一: 通过deb包进行安装

    对应Ubuntu18.04 64bit系统的deb下载地址是 https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/ 

    Update 2018-12-18: 在版本18.09之后, docker将安装包分成了三个, container.io, docker-ce-cli 和 docker-ce, 需要依次都安装

    安装完之后, 会自动在系统中添加 docker 服务

    方式二: 通过apt安装

    sudo apt install apt-transport-https ca-certificates curl software-properties-common
    curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
    sudo apt install docker-ce
    # check
    docker version
    

    禁止docker随系统自启动

    sudo systemctl disable docker

    设置docker的mirror, 否则build会非常慢

    方法一:

    $ sudo edit /lib/systemd/system/docker.service
    # 修改以下这行, 加上后面的 --registry-mirror=https://docker.mirrors.ustc.edu.cn
    ExecStart=/usr/bin/dockerd -H fd:// --registry-mirror=https://docker.mirrors.ustc.edu.cn

    方法二:

    编辑/etc/docker/daemon.json 添加以下内容, docker-cn.com也是国内的源. 一个暂时还可用的阿里的源 https://x9o4p9lt.mirror.aliyuncs.com/ 

    {
      "registry-mirrors": [
        "https://registry.docker-cn.com"
      ]
    }
    

    将自己的用户加入docker用户组, 用id命令查看是否生效. 需要退出本ID的全部登录, 使group设置生效, 如果不生效则重启. 

    # 加入用户组
    sudo usermod -aG docker milton
    # 查看结果
    getent group 
    # 或者
    cat /etc/group
    # 查看是否生效
    id

    Docker Network相关命令

    # 查看docker网络列表
    docker network ls
    
    # 查看具体网络明细
    docker network inspect mybridge
    
    # 创建自定义网络
    docker network create --subnet=192.168.250.1/24 mybridge
    

    Docker Image相关命令

    # 查找image
    docker search centos
    
    # 下载image, 对已经下载的image, 再次执行pull命令时, 会检查更新并下载
    docker pull centos:latest
    
    # 查看image
    docker image ls
    docker image ls --all
    
    # 删除image
    docker image rm [IMAGE ID]
    
    # 导出image
    docker save milton-java -o docker-image-milton-java.tar
    
    # 导入image (可以在其他主机上)
    docker load -i docker-image-milton-java.tar  
    
    # 使用Dockerfile制作image
    docker build -t scot-eureka:1.0 [Dockerfile存放路径]/
    

    注意: 制作image的过程中, 如果失败退出, 会产生一个停止的容器, 以及一个<none>属性的image, 需要对应的用docker rm和docker image rm清理掉

    Docker 容器相关命令

    # 用image创建容器, 使用默认的bridge网络并启动
    docker run -d --name eureka -p 8762:8761 scot-eureka
    docker run -d --name mongo -v /home/milton/mongo:/mongo -p 27017:27017 mongo:4
    docker run -d --name mysql57 -v /home/milton/mysql57:/mysql57 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 --character-set-server=utf8
    
    # 用image创建容器并启动, 指定固定IP (必须使用自定义network)
    docker run   -d --name redis2 --net mybridge --ip 192.168.250.2 redis:4.0.11
    docker run -itd --name java8 --net mybridge --ip 192.168.250.4 java:8 /bin/bash
    docker run -itd --name eureka --net mybridge --ip 192.168.250.3 scot-eureka:latest /bin/bash
    
    # 查看容器
    docker ps
    docker ps -a
    
    # 查看容器日志
    docker logs -f [CONTAINER NAME]
    
    # 将当前终端加入容器, 不是用-it启动的容器勿进行此操作, 否则无法用 ^P^Q退出
    docker attach [CONTAINER NAME]
    
    # 进入容器shell, 在容器中交互地执行命令, 用这种方式进入容器shell是比较安全的, 可以通过exit返回主机shell
    docker exec -it java8 /bin/bash
    
    # 启动/停止容器
    docker start/stop [CONTAINER NAME]
    
    # 删除容器
    docker rm [CONTAINER NAME]
    
    # 用容器ID创建image
    docker commit -a "Milton" -m "java:8 with nano+net-tools" 8da987975c42 milton-java:8
    

    如果是启动ubuntu这样的容器, 需要使用 -itd 参数, 如果只使用 -d, 那么因为没有跑主进程, 容器会立即退出, 例如

    # 运行一个ubuntu18.04容器, 名称为ubuntu1, 将22端口映射到宿主的50001端口上, 在/ubuntu1目录挂载宿主的/home/milton/ubuntu1目录
    docker run -dit --name ubuntu1 -v /home/milton/ubuntu1:/ubuntu1 -p 50001:22 ubuntu:18.04
    

    如果只是一次性使用的容器, 需要加上--rm参数, 例如

    docker run -it --rm ubuntu:16.04 bash
    

    配置容器随着docker服务启动而自启动

    # 查看容器配置
    # docker inspect [container id]
    # 检查里面的 RestartPolicy
    docker inspect mongo
    
    # 设置容器自动启动
    # docker update --restart=always [container id]
    # 默认为no状态, 对于always状态, 在容器被手动stop时是不会自动重启的.
    docker update --restart=always mongo
    

    .

    Docker其他常用命令

    # 测试运行Hello World
    docker run hello-world
    # 查看版本
    docker --version
    # 查看信息
    docker info
    # 登录, 回车会提示输入密码. 不登录的话, 无法下载alpine这样的image
    docker login -u [username]
    

    .

    Docker run命令的详细参数说明

    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

    参数说明

    -a, --attach    绑定标准输入输出 Attach to STDIN, STDOUT or STDERR (default [])
    -c, --cpu-shares int     CPU的份额(相对权重, 整数)  CPU shares (relative weight)
         --cpuset-cpus       绑定容器到指定CPU运行, CPUs in which to allow execution (0-3, 0,1)
    -d, --detach   后台运行容器,并返回容器ID Run container in background and print container ID
    -i: 以交互模式运行容器,通常与 -t 同时使用
    -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
    -p,  小写的P为端口映射,格式为:主机(宿主)端口:容器端口, Publish a container's port(s) to the host (default [])
    -P, --publish-all 大写的P表示将所有暴露的端口随机发布 Publish all exposed ports to random ports
    -m :设置容器使用内存最大值
    -h, --hostname   指定容器的hostname, 例如 "mars"
    -e, --env username="ritchie": 设置环境变量
         --env-file value 从指定文件读入环境变量 Read in a file of environment variables (default [])
    -u, --user     用户名或UID, Username or UID (format: <name|uid>[:<group|gid>])
    -v, --volume     绑定一个本地路径到容器的指定路径. 这样当容器结束后数据依然留在本地文件系统中 Bind mount a volume (default [])
    --name "nginx-lb"    为容器指定一个名称, 不能与已经存在的容器重名
    --ip   指定容器的IPv4地址, 必须要和 --net 合用, 只能用于自定义网络, 不能使用docker默认的bridge网络, Container IPv4 address (e.g. 172.30.100.104)
    --ip6   指定容器的IPv6地址, Container IPv6 address (e.g. 2001:db8::33)
    --mac-address    指定容器的MAC地址 Container MAC address (e.g. 92:d0:c6:0a:29:33)
    --dns 8.8.8.8    指定容器使用的DNS服务器,默认和宿主一致
    --dns-search example.com    指定容器DNS搜索域名,默认和宿主一致
    --net="bridge": 指定容器的网络, 支持 bridge/host/none/container: 四种类型
    --ulimit     Ulimit选项 Ulimit options (default [])
    --link=[]: 添加链接到另一个容器
    --expose     开放一个端口或一组端口 Expose a port or a range of ports (default [])
    --rm          自动检测如果容器存在, 则将其删除 Automatically remove the container when it exits

    例子

    # 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx
    docker run --name mynginx -d nginx:latest
    # 使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口
    docker run -p -d nginx:latest
    # 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data
    docker run -p 80:80 -v /data:/data -d nginx:latest
    # 绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.180 端口上。
    docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
    # 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
    runoob@runoob:~$ docker run -it nginx:latest /bin/bash
    root@b8573233d675:/# 
    # 生产环境中设置了环境变量的启动命令
    docker run -d
     -v /var/run/docker.sock:/var/run/docker.sock
     -v /:/host
     -e FLUENTD_OUTPUT=elasticsearch
     -e ELASTICSEARCH_HOST=elasticsearch
     -e ELASTICSEARCH_PORT=9200
     --link=quickstart_elasticsearch_1:elasticsearch
    registry.cn-hangzhou.aliyuncs.com/acs-sample/fluentd-pilot:latest

    .

  • 相关阅读:
    SQL Server实时同步更新远程数据库遇到的问题
    SqlServer实时数据同步到MySql
    实现SQL Server到MySQL的表增量同步
    C#同步SQL Server数据库中的数据–数据库同步工具[同步新数据]
    如何实现sqlserver中的部分表的数据定时同步到oracle
    SQL Server 2005 实现数据库同步备份 过程–结果—分析
    SQL Server数据库同步问题分享[未完,待续](一)
    SQL Server数据库同步问题分享(三)—创建订阅
    SQL Server数据库同步问题分享(二)—操作步骤[未完,待续]
    SQL Server 跨库同步数据
  • 原文地址:https://www.cnblogs.com/milton/p/9866963.html
Copyright © 2011-2022 走看看