zoukankan      html  css  js  c++  java
  • docker命令

     

    在线指导书: https://github.com/yeasy/docker_practice/blob/master/SUMMARY.md

    pdf链接; https://github.com/yeasy/docker_practice/wiki/%E4%B8%8B%E8%BD%BD

     

    • docker安装

    https://www.cnblogs.com/wq3435/p/6479768.html

    linux各个发行版可能自带了较老的或者非官方的docker,先进行删除

    以上办法已经过时,它针对的是2018年以前的1.0-1.13版本(io版)

    现在分为ce版和ee版,其实版本号好像是17.0? ce版为社区版,免费。

    安装参考中文链接: http://www.runoob.com/docker/centos-docker-install.html

    安装参考官方链接: https://docs.docker.com/install/linux/docker-ce/centos/#install-using-the-repository

     

     

     

    • docker命令

    交互式容器 / 守护式容器

    交互式: 容器启动后就要对他进行命令行操作的,退出命令行操作环境则容器就结束了

    守护式: 容器启动后他就自己默默跑着的,也就是后台运行

    启停docker服务

    sudo service docker

    参数: 

    start 启动

    stop 停止

    restart 重启

    查看版本

    docker version

     

    搜索镜像

    docker search xxx

    默认从https://hub.docker.com搜索镜像

    下载镜像

    docker pull xxx

     

    查看已经下载的镜像

    docker images

     

    运行镜像

    docker run 

    参数:

    --name=[容器名] 用于设置运行的容器名

    -it 等同-i -t 用于运行起来后直接进入交互模式(交互式容器)

    注意: 退出容器则容器自动结束。如果希望切换成守护式容器,按ctrl+p ctrl+q

    -d 与-it互斥的操作,启动守护式容器,容器默默在后台运行

    -P 暴露/映射所有端口

    -p [主机端口:容器端口] 

    列出所有容器(运行的镜像)

    docker ps

    参数:

    -a 列出所有容器。docker ps用于查看当前正在运行的容器,

    查看容器配置信息

    docker inspect [容器名/容器ID]

     

    重新启停容器

    docker start [容器名]

    参数:

    -i 运行后直接进入交互模式

    删除容器

    docker rm [容器id]

    只能删除非运行中的容器

    连接到某个容器

    docker attach [容器id]

    守护式容器默默运行着,想进去进行命令行操作的话,需要先连接他,这样这个容器就从守护式转成了交互式了。

    查看容器日志

    docker logs

    日志其实就是程序在界面上的输出(比如程序里输出的print("hello world");)

    这条命令用于查看守护式容器里的程序输出,毕竟交互式的你可以直接看到。

    默认不带参数的话,会看到所有输出日志。(小心会大到难以控制)

     

    参数:

    -f 屏幕上一直更新日志,按ctrl+c退出

    -t 给日志添加时间戳

    --tail [条数] 用于显示最后多少条,如果为0,则一直跟着更新最新一条。和-f一样了

    查看容器内运行的进程

    docker top [容器名]

    就是看容器里正开着什么进程

    在运行中的容器里启动新进程

    docker exec

    这样1个容器里可以跑多个进程/服务了

    我们可以把网站,数据库等等东西放一个容器里一起运行了

    停止守护式容器

    docker stop [容器名]

    docker kill [容器名]

    交互式容器你退出他就结束了,所以只有守护式容器需要额外停止。

    stop是给容器中运行的进程发退出指令,等进程自己结束后,整个容器停止。

    kill就是直接掐死

    删除镜像

    docker rmi [镜像]

     

    复制文件

    docker cp

    支持多文件复制

    从host到容器内

    docker cp src/.  mycontainer:/target

    从容器内到host

    docker cp mycontainer:/src/.  target

     

    其中.的作用和*相同,代表所有文件

     

    熟悉了命令行之后,其实可以使用web端来管理远程docker服务器: https://portainer.io

    据说Kitematic更好用,但是只有win和mac版。

     

     

    • 自建仓库

    所谓自建仓库就是在自己服务器上拥有自己的镜像仓库

    自建仓库需要官方的Registry镜像,官方描述: The Docker Registry implementation for storing and distributing Docker images.

    Registry就是一个用来管理镜像的服务(程序),并以镜像形式提供给你用了(这就是docker伟大之处)

    放个链接不做深入讨论: http://www.cnblogs.com/lienhua34/p/4922130.html

    注意,关于自建仓库时候的 目录挂载操作,其实是将Host机里的一个目录挂到容器里面去,如果Host机的目录不存在则自动创建。

    为什么要挂载目录? 因为仓库管理程序Registry是运行在容器里的,那上传的镜像也会保存在这个镜像的容器里,无论是硬盘操作效率还是维护操作成本,都会略高一点。

    如果把容器里的文件夹直接映射到Host机里的文件夹,那在容器里对文件夹的操作其实就是在Host机里对文件夹操作,磁盘效率高,维护人员也不需要有docker知识直接备份Host里的文件夹即可。

    一个坑注意: 使用http方式上传镜像可能报错,需要设置解除安全限制(因为默认允许https不允许http)

     

    附一篇在阿里云建私有docker仓库的文章: https://www.mykernel.cn/archives/487

     

     

    • 远程docker管理 GUI:

    portainer

    信息来源: https://www.ibm.com/developerworks/cn/cloud/library/cl-getting-started-docker-and-kubernetes/index.html

     

     

     

     

    • mysql:
    • 目前使用阿里的alisql(mysql的一个分支),据说是在快速写入和维护方面做了很多优化

    注意pull的时候要指定tag为centos (https://hub.docker.com/r/alisql/alisql/)

    docker pull alisql/alisql:centos

    docker run --name [容器名alisql-tst] -e MYSQL_ROOT_PASSWORD=[设初始密码123456] -d -p [主机端口]:[容器端口3306] alisql/alisql:centos

    上面这步run可能会报错!因为有些数据库因为引擎的需要必须关闭THP,而alisql刚好使用了那种引擎。所以要先关闭THP,否则会启动失败。

    修改方案: https://newbiedba.wordpress.com/2015/09/07/disabling-transparent-huge-pages-in-centos-7-x/

    简单描述就是在 /etc/rc.d/rc.local 里面写1句话后保存退出

    echo never > /sys/kernel/mm/transparent_hugepage/enabled

    随后执行

    chmod u+x /etc/rc.d/rc.local

    执行reboot重启linux,这时候docker run就能成功了

     

    关于修改密码: 

    参考链接: https://www.cnblogs.com/liufei88866/p/5619215.html

    docker下alisql:centos的版本应该是mysql 5.6.x

    安装时候如果开启了远程root连接,则root实际上有2个密码(实际上对应2条user记录),一个是host='localhost'代表本地登录的root, 一个是host='%'代表远程登陆的root

    所以修改root密码分别需要设定本地和远程的,当然记性好的话可以设置为不一样的

    修改密码方法:

    进执行命令环境

    docker exec -it [容器名] bash

    进mysql环境

    mysql -u root

    修改本地root密码

    SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码');

    修改远程root密码

    SET PASSWORD FOR 'root'@'%' = PASSWORD('密码');

     

    • 另一个选型是mariadb,以前用过还凑合

     

    docker run -d --name mysql-tst -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 8900:3306 mysql

     

     

    • 常用指令

    1. 快速进入一个正在运行的容器内

    docker exec -it {容器名} bash

    如果提示找不到bash,可以使用sh

    docker exec -it {容器名} sh

     

     

     

    • 基础概念和指导思想

    1. 按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。

    数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器可以随意删除、重新 run,数据却不会丢失。

    参考: https://blog.csdn.net/u012422829/article/details/54930799

     

    2. 镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

    一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

    一般而言,一个仓库包含的是同一个软件的不同版本的镜像,而标签则用于对应于软件的的不同版本。我们可以通过<仓库名>:<标签>的格式来指定具体是哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

    以 Ubuntu 镜像 为例,ubuntu 是仓库的名字,其内包含有不同的版本标签,如,14.04, 16.04。我们可以通过 ubuntu:14.04或ubuntu:16.04 来具体指定哪个版本的镜像。如果忽略标签 比如 ubuntu,那将视为 ubuntu:latest。

    仓库名经常以 两段式路径 形式出现,比如 jwilder/nginx-proxy,前者往往意味着 Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名。但这并非绝对,取决于所使用的具体 Docker Registry 的软件或服务。

     

     

     

     

     

  • 相关阅读:
    触摸屏、X11去掉鼠标
    RPM验证与数字签名(Verify/Signature)
    GPG入门
    DIY的RPM包怎么签名呢
    DIY的RPM包怎么签名呢 How to sign your custom RPM package with GPG key
    iOS开发基础知识--碎片40
    iOS开发基础知识--碎片39
    iOS开发基础知识--碎片38
    iOS开发基础知识--碎片37
    iOS开发基础知识--碎片36
  • 原文地址:https://www.cnblogs.com/Jackbk/p/12693730.html
Copyright © 2011-2022 走看看