1. 安装 yum install -y yum-utils device-mapper-persistent-data lvm2 epel-release yum-config-manager --add-repo https://download./linux/centos/docker-ce.repo # 查看可安装的docker版本 yum list docker-ce --showduplicates | sort -r yum install docker-ce systemctl start docker docker version 2. 配置镜像加速源 文件没有就新建一个即可 [root@configman docker]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://pee6w651.mirror."] } 3. 常用命令 查看镜像 docker images 查找镜像 [root@configman ~]# docker search redis 获取镜像 docker pull nginx docker pull tomcat 查看运行的镜像 docker ps -a Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序 docker run centos:6.9 /bin/echo "Hello world" 我们通过docker的两个参数 -i -t,让docker运行的容器实现"对话"的能力 docker run -i -t centos:6.9 /bin/bash 使用以下命令创建一个以进程方式运行的容器 [root@configman docker]# docker run -d centos:6.9 /bin/sh -c "while true; do echo hello world; sleep 1; done" 在输出中,我们没有看到期望的"hello world",而是一串长字符 3cb262ebb07842a3b3801b145a12c9fb8d967115a7ff037b3f90ba13e9ad6e6d 这个长字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。 首先,我们需要确认容器有在运行,可以通过 docker ps 来查看 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3cb262ebb078 centos:6.9 "/bin/sh -c 'while t…" 11 minutes ago Up 11 minutes optimistic_bardeen 930bd1904df8 centos:6.9 "/bin/bash" 19 minutes ago Exited (1) 18 minutes ago boring_elion 7c5ea0159ed9 nginx "nginx -g 'daemon of…" 25 minutes ago Exited (0) 23 minutes ago adoring_euclid f1e2f087addc hello-world "/hello" 26 minutes ago Exited (0) 26 minutes ago adoring_chatterjee 查看日志 docker logs 3cb262ebb078 docker logs optimistic_bardeen 启停止容器 docker start/stop 3cb262ebb078 docker start/stop optimistic_bardeen 删除容器 docker rm 3cb262ebb078 docker rm optimistic_bardeen 4. 客户端使用 docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。 运行一个web应用 前面我们运行的容器并没有一些什么特别的用处。 接下来让我们尝试使用 docker 构建一个 web 应用程序。 我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。 docker pull training/webapp # 载入镜像 docker run -d -P training/webapp python app.py
[root@configman ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 794fa8091343 training/webapp "python app.py" 9 minutes ago Up 9 minutes 0.0.0.0:32768->5000/tcp clever_ritchie 通过IP:32768 即可访问 我们也可以通过 -p 参数来设置不一样的端口: runoob@runoob:~$ docker run -d -p 5000:5000 training/webapp python app.py [root@configman ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9904e9afd6c9 training/webapp "python app.py" 3 minutes ago Up 3 minutes 0.0.0.0:5000->5000/tcp xenodochial_ptolemy 794fa8091343 training/webapp "python app.py" 16 minutes ago Up 16 minutes 0.0.0.0:32768->5000/tcp clever_ritchie 网络端口的快捷方式 通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。 docker port 9904e9afd6c9 5000/tcp -> 0.0.0.0:5000 查看 WEB 应用程序日志 docker logs [ID或者名字] 可以查看容器内部的标准输出。 runoob@runoob:~$ docker logs -f 9904e9afd6c9 -f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。 从上面,我们可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。 查看WEB应用程序容器的进程 我们还可以使用 docker top 来查看容器内部运行的进程 [root@configman ~]# docker top 9904e9afd6c9 UID PID PPID C STIME TTY TIME CMD root 62983 62966 0 16:37 ? 00:00:00 python app.py 检查 WEB 应用程序 使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。 [root@configman ~]# docker inspect 9904e9afd6c9 [ { "Id": "9904e9afd6c907d46ea07f95bc49dd77fd3c848b5fd0c9c7a023498d5a52a5a6", "Created": "2019-03-04T08:37:21.597591699Z", "Path": "python", "Args": [ "app.py" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, .......................................................................................................................... 下载完成后,我们就可以使用这个镜像了。 runoob@runoob:~$ docker run -d httpd 创建镜像 当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
更新镜像 更新镜像之前,我们需要使用镜像来创建一个容器。 docker run -t -i centos:6.9 /bin/bashroot@fdd312d511f9:/# 在运行的容器内使用yum update 命令进行更新。 在完成操作之后,输入 exit命令来退出这个容器。 此时ID为fdd312d511f9的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器副本。 docker commit -m="has update" -a="suwei" fdd312d511f9 suwei/centos6.9:v2 各个参数说明:
[root@configman ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE suwei/centos6.9 v2 368582acb23a 5 seconds ago 440MB nginx latest 8c9ca4d17702 5 days ago 109MB httpd latest d3a13ec4a0f1 2 weeks ago 132MB 运行新的镜像 docker run -t -i suwei/centos6.9:v2 /bin/bash 构建镜像 我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。 [root@configman ~]# cat Dockerfile FROM centos:6.7 MAINTAINER Fisher "email@qq.com" RUN /bin/echo 'root:111111' |chpasswd RUN useradd test RUN /bin/echo 'test:test' |chpasswd RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" > /etc/default/local EXPOSE 22 EXPOSE 80 CMD /usr/sbin/sshd -D 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。 第一条FROM,指定使用哪个镜像源 RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。 然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。 docker build -t suwei/centos:6.7 . 参数说明:
使用docker images 查看创建的镜像已经在列表中存在,镜像ID为226028b77315 [root@configman ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE suwei/centos 6.7 226028b77315 43 seconds ago 191MB suwei/centos6.9 v2 368582acb23a 32 minutes ago 440MB 我们可以使用新的镜像来创建容器 Docker 容器连接 前面我们实现了通过网络端口来访问运行在 docker 容器内的服务。下面我们来实现通过端口连接到一个 docker 容器 我们也可以使用 -p 标识来指定容器端口绑定到主机端口。 两种方式的区别是:
docker run -d -p 5000:5000 training/webapp python app.py 另外,我们可以指定容器绑定的网络地址,比如绑定 127.0.0.1。 docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py 如果要绑定 UDP 端口,可以在端口后面加上 /udp docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py 镜像操作 删除 docker rmi 镜像名称/IMAGE ID docker rmi 7d0d6c2cec45 导出 docker save -o 备份名称.tar 镜像名称 例如: [root@configman ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE my/nginx v888 7d0d6c2cec45 23 hours ago 108MB mynginx latest 1fb19eb746fe 23 hours ago 108MB 导入 docker save -o mynginx.tar mynginx 恢复就很简单了 docker load -i mynginx.tar 可以恢复到其它服务器或系统 有个问题 如果遇到镜像名称一致的该如何制定备份镜像呢 例如 [root@test01 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hehe 30821 275f450c200c 4 hours ago 265MB test 25389 bfcdce890dcd 23 hours ago 254MB test 26826 ec342d163e2b 25 hours ago 254MB test 14879 228f6e432d8c 28 hours ago 254MB 两种方式 docker save -o test.tar test:25389 或者 docker save -o test.tar bfcdce890dcd |
|