分享

docker安装基本使用

 苏鱼鱼的IT运维 2019-03-06

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

  • -d:让容器在后台运行。

  • -P:将容器内部使用的网络端口映射到我们使用的主机上。

[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镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  • 1.从已经创建的容器中更新镜像,并且提交这个镜像

  • 2.使用 Dockerfile 指令来创建一个新的镜像

更新镜像

更新镜像之前,我们需要使用镜像来创建一个容器。

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

各个参数说明:

  • -m:提交的描述信息

  • -a:指定镜像作者

  • fdd312d511f9容器ID

  • 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 .

参数说明:

  • -t :指定要创建的目标镜像名

  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

使用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 标识来指定容器端口绑定到主机端口。

两种方式的区别是:

  • -P :是容器内部端口随机映射到主机的高端口。

  • -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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多