• Docker命令操作


    使用docker命令需要管理员权限,如果希望每次输入docker相关命令时,不用sudo,可通过以下命令进行设置

    sudo usermod -a -G docker $USER
    sudo service docker restart
    newgrp - docker
    

    官方提供的ubuntu系统镜像,工具命令很少,如希望内部安装ping、ifconfig网卡或者vim等工具,可以通过以下命令进行设置[需要联网,而且耗时]

    apt-get update
    apt install net-tools        # ifconfig 
    apt install iputils-ping     # ping
    

    镜像操作

    # 搜索镜像  
    docker search 镜像名
    # 拉取镜像
    docker pull 镜像名
    # 查看所有镜像
    docker image ls || docker images || docker images ls --all
    # 运行镜像创建为容器<"这里的内容为可选参数">
    docker run -itd <-p,-v...> <--name=别名>镜像名字<:版本>
    # 删除镜像(需要镜像没有成为容器在运行)
    docker image rm 镜像名  || docker rmi 镜像名<id> || docker rmi -f 镜像名<id>  # -f 强制删除加显示信息
    
    # 批量操作删除镜像
    docker rmi `docker image ps -aq `
    # 导入镜像
    docker load -i 路径文件名.tar <镜像名> ||  docker load < 路径文件名.tar.gz
    # 保存镜像<打包>
    docker save -o 文件名.tar <镜像名>    || docker save 镜像名 > 路径文件名.tar.gz
    # 提交自己定义的镜像
    docker commit 镜像id 镜像名
    

    参数

    exec        # 进入容器的参数
    -i          # 交互式的操作容器
    -t          # 开启一个terminel终端,用于和linux交互
    -d         # 后台运行容器
    /bin/sh    # 指定使用centos的bash解释器
    bash      # 进入容器命令窗口,配合-it使用
    -c         # 运行一段shell命令
        
    docker search  hello-docker     # 搜索docker镜像 ,就是去 docker hub搜索 hello-docker而已
    docker pull hello-world         # 下载公网的,docker镜像
    docker image ls                # 查看本地的镜像有哪些
    docker images                  # 这两条命令一样的,docker进行了很多的命令升级,不用慌
    docker run hello-world         # 运行一个docker镜像,产生一个容器实例
    docker container  ls           # 列出所有正在运行的容器
    docker ps  -a              # 列出所有曾经运行过的容器记录,以及正在运行的容器记录
    docker pull  centos             # 下载cnetos镜像
    

    容器操作

    必须要有镜像

    # 运行镜像后台创建为容器<"这里的内容为可选参数">-p主机端口:指定端口,-v主机路径:指定路径
    docker run -itd <-p,-v...> <--name=别名>镜像名字<:版本>
    # 单纯的创建容器			|| 创建容器并输出hehe
    docker run hello-world   || docker run --name namecentos -it centos /bin/echo "hehe"
    # 查看容器
    docker container ls || docker ps -a 
    # 启动容器
    docker container start 容器名或id
    # 停止容器
    docker container stop 容器名或id
    # 强制停止容器
    docker container kill 容器名或id
    # 批量操作容器
    docker stop/start/rm `docker ps -aq`
    # 进入容器
    docker container exec -it 容器名或id  bash  || docker exec -it 容器id bash
    # 删除容器
    docker container rm 容器名或id
    # 把容器保存成镜像
    docker commit <容器名或id> <新镜像名>
    # 查看容器日志
    docker logs 容器id
    # 查看容器端口映射本地
    docker port 容器id
    # 查看容器内的进程
    docker top 容器id
    

    删除过程(停止容器->删除容器->删除镜像)

    docker container stop <容器名称/容器ID>
    docker container rm  <容器名称/容器ID>
    docker image rm <容器名称/容器ID>
    

    重新拷贝一个镜像加修改名称

    docker tag 镜像名:版本 10.0.3.33:5000/新镜像名:版本
    docker tag hello-world:latest 10.0.3.33:5000/hello-world:latest
    

    仓库操作

    docker提供了一个类似于github的仓库dockerhub, 
    网址https://hub.docker.com/
    

    在linux登录docker仓库

    docker login
    # 提示输入账户和密码
    

    注意要保证image的tag是账户名,如果镜像名字不对,需要改一下tag

    改镜像名

    # 语法是:  docker tag 镜像名 账户名/新镜像名
    docker tag nginx wsh885/newnginx1.0
    

    推送docker image到dockerhub

    推送镜像到仓库

    docker push wsh885/newnginx1.0:latest(版本)
    

    下载仓库中的镜像

    docker pull wsh885/newginx1.0
    

    搭建内部使用的私有仓库

    官方提供的私有仓库docker registry用法

    https://yeasy.gitbooks.io/docker_practice/repository/registry.html
    

    1.下载registry镜像并且启动私有仓库容器

    docker pull registry
    

    私有仓库会被创建在容器的/var/lib/registry下,因此通过-v参数将镜像文件存储到本地的/opt/data/registry
    端口映射容器中的5000端口到宿主机的5000端口(不用-it加了也进不了容器里面)

    docker run -d -p 5000:5000 -v /opt/docker/registry:/var/lib/registry registry
    

    2.检查启动的registry容器

    docker ps -a 
    
    http://10.0.3.33:5000
    

    3.修改镜像tag,以docker_registry的地址端口开头

    注意:需要这样格式的镜像名,不然上传不了

    docker tag 镜像名:版本 10.0.3.33:5000/新镜像名:版本
    docker tag redis:latest 10.0.3.33:5000/newredis:latest
    docker images
    

    4.Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,这里必须写正确json数据

    vim /etc/docker/daemon.json
    // 添加一行配置("insecure-registries":["10.0.3.33:5000"]):
    {   // 这条是容器加速器
      "registry-mirrors": ["http://95822026.m.daocloud.io"],
      "insecure-registries":["10.0.3.33:5000"]
    }
    

    5.将daemon.json配置文件写入到docker服务中,写入到[Service]配置块中,加载此配置文件

    vim /lib/systemd/system/docker.service

    [Service]
    Type=notify
    # the default is not to use systemd for cgroups because the delegate issues still
    # exists and systemd currently does not support the cgroup feature set required
    # for containers run by docker
    ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    ExecReload=/bin/kill -s HUP $MAINPID
    # 加这一条
    EnvironmentFile=-/etc/docker/daemon.json
    TimeoutSec=0
    RestartSec=2
    Restart=always
    

    6.修改了docker配置文件之后,重新加载docker

    systemctl daemon-reload
    

    7.重启docker服务

    systemctl restart docker  # 注意,重启docker服务,所有的容器都会挂掉
    

    8.重启了dockerr容器

    # 启动registry服务
    docker ps -a 
    docker start 容器id
    docker start `docker ps -aq` # 批量启动
    

    9.上传镜像到私有仓库

    docker ps -a
    docker push 10.0.3.33:5000/newredis
    # 再创建一个
    docker tag mysql:latest 10.0.3.33:5000/newmysql:latest
    # 再上传
    docker push 10.0.3.33:5000/newmysql
    

    10.使用以下链接访问仓库, 可以查看到我们上传的镜像

    http://10.0.3.33:5000/v2/_catalog
    # 可以到目录里面去看
    cd /opt/docker/registry/docker/registry/v2/repositories/
    

    11.当我们上传到私有仓库完成之后,相当于已经备份过了这个镜像, 那我们就可以删除本地的这个镜像,如果要使用的话,就直接从私有仓库下载下来使用

    # 删除
    docker rmi 容器名字
    docker rmi 10.0.3.33:5000/newredis
    # 下载
    docker pull 10.0.3.33:5000/newredis
    

    自定义docker容器(dockerfile)

    1.创建下载文件

    /opt下建立了docker目录,创建文件和下载一个django-2.1.7的源码包

    touch Dockerfilerun.sh 其中run.sh是用来执行Djanog的bash脚本,Dockerfile即为自动build python的文件,此处建立容器的核心也是Dockerfile

    下载阿里云扩展源epel.repo文件

    # 在/opt/docker/目录中下载
    wget https://media.djangoproject.com/releases/2.1/Django-2.1.7.tar.gz
    wget -O epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    

    2.编写Dockerfile文件

    FROM centos
    MAINTAINER TigerLee
    
    ADD epel.repo /etc/yum.repos.d  # 将当前目录的epel.repo文件拷贝到容器的/etc/yum.repos.d目录下
    RUN yum update -y               # 运行命令
    
    RUN yum install -y python36
    RUN yum install -y python36-pip
    RUN pip3 install setuptools
    ADD Django-2.1.7.tar.gz /opt/
    
    WORKDIR /opt/                   # 进入/opt目录
    RUN mv Django-2.1.7 django      # 运行命令mv
    
    WORKDIR /opt/django             # 进入/opt/django目录
    RUN python3 setup.py install
    
    WORKDIR /opt
    RUN django-admin.py startproject qishidj
    
    ADD run.sh /opt/qishidj/run.sh
    RUN sed -i "s/ALLOWED_HOSTS = []/ALLOWED_HOSTS = ['*']/g" /opt/qishidj/qishidj/settings.py   # 替换django的配置文件,允许任何主机都可以访问
    WORKDIR /opt/qishidj
    RUN chmod 777 run.sh
    EXPOSE 8000                        # 声明容器端口
    CMD ["/bin/sh","run.sh"]           # 容器启动时默认执行的命令
    

    3.编写run.sh

    python3 manage.py runserver 0.0.0.0:8000
    

    4.构建docker镜像

    sudo docker build -t django_file-217 .    # 注意,有一个点,表示在当前页
    # 构建完成后,查看镜像,有当前创建的django_file-217镜像文件
    docker images
    

    5.启动创建启动容器

    docker run -itd -p 9090:8000 django_file-217
    

    6.查看

    docker ps -a                        # 查看容器状态,运作中则可以进入容器
    docker exec -it 容器id bash         # 使用交互式模式进入容器,再使用ps -ef查看运行的进程
    ps -ef 						       # 有运行状态则表示成功
    # 外部通过访问ip:9090 即可访问django启动画面了
    # 查看docker的log日志
    docker logs -f container_id(容器id) # -f为持续显示
    

    7.导出镜像

    # 如果想容器保存为镜像用此命令 ---> docker commit <容器名或id> <新镜像名>
    # 本身已经有镜像了,直接导出 # -o 参数  指定地址和文件名   镜像名
    docker save -o mydjango.tar.gz django_file-217  # 这样就有一个解压包了
    

    8.推送到仓库

    # 推送到线上自己的仓库
    docker login 		# 登录
    docker tag django_file-217 wsh885/mydjango_217
    docker push wsh885/mydjango_217
    

    docker 镜像加速器

    加速器镜像站:https://www.daocloud.io/mirror#accelerator-doc
    资料:https://www.cnblogs.com/pyyu/p/6925606.html
    
    
    # 一条命令加速
    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
    
    # 这条命令其实就是改了docker的一个配置文件里面的注册镜像地址, 可以查看一下 
    cat /etc/docker/daemon.json   
    ### 添加 ###
    

    多端口多路径映射

    查看docker port 容器id

    docker run -itd --name=88luffy -p 80:80 -v /home/ubuntu/luffyo/luffyclient/dist/:/usr/share/nginx/html -p 8080:80 -v /home/ubuntu/luffyo/luffyserver/luffyserver/static/:/usr/share/nginx/static nginx
    
  • 相关阅读:
    Code First Migrations更新数据库结构(数据迁移) 【转】
    Lambda表达式详解【转】
    @Html.Raw用法
    ASP.NET MVC文件上传【转】
    SQL Server附加数据库拒绝访问错误解决方法
    window.location.href的用法
    vs2013中将复制过来的文件或文件夹显示到解决方案管理
    Expression<Func<TObject, bool>>与Func<TObject, bool>的区别
    VS中的一些标记
    ob_get_contents()
  • 原文地址:https://www.cnblogs.com/wshlym/p/11329913.html
Copyright © 2020-2023  润新知