好吧, 这是我第二次玩这个玩意了, 其实我现在这家公司是没有接触到docker的, 因此对它也是半桶水的状态, 之前有朋友叫我写过shell去离线部署它, 部署都那样不值一提, 后来到我第二次去接触它的时候有了不一样的感悟。
它确实是一个很好的中间件, 到目前为止我接触到的来说, 对我来说就像发现了一个新世界。后来我发现, 现在大部分搞linux的都必须会用docker和ansible了, 而我还局限于shell, python还是半桶水, 一言难尽, 这次就说说我第二次用到的docker各种命令以作一份笔记纪念我逝去的青春。
第一, 动手了重新弄了centos7.6minimal版, 扔vm开机...省略。
开始拉取docker, 直接yum了, 离线编译的方法也差不多, 太简单不说了, 说yum了, 老套路, 先拉一个安装脚本爽一下
curl -fsSL https://get.docker.com -o get-docker.sh
这个玩意能干嘛呢, 自动部署, 自动创建服务, 跟yum install ***差不多吧。
下一步,扔源, 这个就是用到烂了, 就是下面的一坨东西
[docker-ce-stable] name=Docker CE Stable - $basearch baseurl=https://download.docker.com/linux/centos/7/$basearch/stable enabled=0 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg [docker-ce-stable-debuginfo] name=Docker CE Stable - Debuginfo $basearch baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/stable enabled=0 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg [docker-ce-stable-source] name=Docker CE Stable - Sources baseurl=https://download.docker.com/linux/centos/7/source/stable enabled=0 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg [docker-ce-edge] name=Docker CE Edge - $basearch baseurl=https://download.docker.com/linux/centos/7/$basearch/edge enabled=1 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg [docker-ce-edge-debuginfo] name=Docker CE Edge - Debuginfo $basearch baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/edge enabled=0 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg [docker-ce-edge-source] name=Docker CE Edge - Sources baseurl=https://download.docker.com/linux/centos/7/source/edge enabled=0 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg [docker-ce-test] name=Docker CE Test - $basearch baseurl=https://download.docker.com/linux/centos/7/$basearch/test enabled=0 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg [docker-ce-test-debuginfo] name=Docker CE Test - Debuginfo $basearch baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/test enabled=0 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg [docker-ce-test-source] name=Docker CE Test - Sources baseurl=https://download.docker.com/linux/centos/7/source/test enabled=0 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg [docker-ce-nightly] name=Docker CE Nightly - $basearch baseurl=https://download.docker.com/linux/centos/7/$basearch/nightly enabled=0 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg [docker-ce-nightly-debuginfo] name=Docker CE Nightly - Debuginfo $basearch baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/nightly enabled=0 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg [docker-ce-nightly-source] name=Docker CE Nightly - Sources baseurl=https://download.docker.com/linux/centos/7/source/nightly enabled=0 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg
不好意思, 太长了, 扔进/etc/yum.repos.d, 命名吧随便,只要后缀是repo就行。
清一下yum之前的缓存
yum clean all && yum list
重头戏来了, 刚才下来的get-docker.sh, 授个执行权给它吧。
chmod +x get-docker.sh
懒人就这样别介意, 你也可以sh get-docker.sh,
跑一下吧小shell儿。
./get-docker.sh
ok! 稍等一会待他自动配置。
ok!配置好了, 就是这样的了。呃, 没图, 就是就是which docker出来指定目录说明执行程序在bin里面了。
先启动看一下吧。
systemctl start docker
查看一下进程
[root@localhost yum.repos.d]# ps aux | grep docker root 7431 0.1 4.3 561032 62084 ? Ssl 17:39 0:20 /usr/bin/dockerd -H fd:// root 7452 0.1 2.4 393784 34332 ? Ssl 17:39 0:19 containerd --config /var/run/docker/containerd/containerd.toml --log-level info root 8720 0.0 0.0 112728 988 pts/2 S+ 21:01 0:00 grep --color=auto docker
下面记录一下基本的命令吧。
run:创建一个容器并运行一个命令, 具体用法就是docker run -it 镜像名 shell, 基本这样就能跑。但是局限于各种需求, 他有各种参数, 比如常用的
-
-d: 后台运行容器,并返回容器ID;
-
-i: 以交互模式运行容器,通常与 -t 同时使用;
-
-p: 端口映射,格式为:主机(宿主)端口:容器端口;
-
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-
--name="nginx-lb": 为容器指定一个名称;
start/stop/restart:启动,停止,重启一个容器, 具体用法就是 docker start 容器名
rm:删除一个或多个容器, 具体用法docker rm 容器名或者docker rm 容器名1 容器名2
-
-f :通过SIGKILL信号强制删除一个运行中的容器
-
-l :移除容器间的网络连接,而非容器本身
-
-v :-v 删除与容器关联的卷
exec:在容器中执行命令, 具体用法docker exec -it 容器名 shell 命令, 例如这样, docker exec -it nginx /bin/bash /root/chenglee.sh
-
-d :分离模式: 在后台运行
-
-i :即使没有附加也保持STDIN 打开
-
-t :分配一个伪终端
ps:列出容器, 具体用法docker ps 或者docker ps -a
-
-a :显示所有的容器,包括未运行的。
-
-f :根据条件过滤显示的内容。
-
--format :指定返回值的模板文件。
-
-l :显示最近创建的容器。
-
-n :列出最近创建的n个容器。
-
--no-trunc :不截断输出。
-
-q :静默模式,只显示容器编号。
-
-s :显示总的文件大小。
top:查看容器中运行的进程信息, 具体用法docker top 容器名
logs:获取容器中的日志, 具体用法 docker logs 容器名或者是docker logs -f 容器名(动态查看), 很熟悉是吧, 没错, 跟tail -f一样的功能
-
-f : 跟踪日志输出
-
--since :显示某个开始时间的所有日志
-
-t : 显示时间戳
-
--tail :仅列出最新N条容器日志
port:列出指定容器的端口映射, 具体用法docker port 容器名
pull:从镜像仓库拉取或更新指定镜像到本地, 具体用法docker pull 镜像名, 比如拉取tomcat, docker pull tomcat
-
-a :拉取所有 tagged 镜像
-
--disable-content-trust :忽略镜像的校验,默认开启
search:从仓库中查找相关的镜像, 具体用法docker search 模糊镜像名
images:列出本地镜像, 具体用法docker images或者docker images 镜像名
-
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
-
--digests :显示镜像的摘要信息;
-
-f :显示满足条件的镜像;
-
--format :指定返回值的模板文件;
-
--no-trunc :显示完整的镜像信息;
-
-q :只显示镜像ID。
rmi:删除本地一个或多个镜像, 具体用法docker rmi 镜像名或者docker rmi 镜像名1 镜像名2
-
-f :强制删除;
-
--no-prune :不移除该镜像的过程镜像,默认移除;
import:导入容器, 具体用法docker import 容器名字 新名字
export:导出容器, 具体用法docker export -o 新名字 容器名字
save:导出镜像, 具体用法docker save -o 新名字 镜像名
load:导入镜像, 具体用法docker load -i 镜像名
info:信息, 用法docker info
version:版本, 用法docker version
有一堆东西, 好累...继续了。
先拉取一个镜像试试
docker pull tomcat
拉取失败或者特别慢的, 可能是源的问题,下面配置国内源.
vim /etc/docker/daemon.json
{ "registry-mirrors": ["https://registry.docker-cn.com"] }
ok, 重启一下docker
systemctl restart docker
再拉, 发现速度很快, 刷刷刷...完成!
就像这样(上贴图了有嗲急冻)
这就是本地镜像了, 假装是刚拉下来的[滑稽]
先跑一个这个tomcat, 把它的端口映射到主机的随机端口看看
docker run -it -d -P tomcat
-P参数大有来头
-
-d:让容器在后台运行。
-
-P:将容器内部使用的网络端口映射到我们使用的主机上。
这个32768端口是随机的哈, 意思就是把容器中的8080映射到了我们主机上的32768上面了, 下面启动一下吧
docker start dreamy_bhabha
后面的dreamy_bhabha是这个容器的随机名字, 要想指定也可以, 一会介绍.
好了, 查看一下容器内部日志
docker logs dreamy_bhabha
tomcat启动日志, 下面在浏览器看一下
简直是不能再明显了, 好了, 下面移除这个镜像, 说一下这个映射指定端口以及容器指定名字
docker run -it -d -p 80:80 --name mynginx nginx
-p(小写), 前一个是主机的端口, 后一个是容器的端口
--name, 指定容器名字
好了, 现在启动nginx跑一下吧, 一般run的时候已经是启动的了, 如果没有启动那么就docker start mynginx
这个肯定是没问题的。
那么如果想进容器里面呢, exec该上场了, 现在进tomcat容器里面看看
docker exec -it dreamy_bhabha /bin/bash
那么查看一下容器里面的进程呢
docker top dreamy_bhabha
下一篇即将放出dockerfile构建镜像的实现方式。
简单不过了, 没啥难度。
基本就到这了。