docker安装:
使用阿里云centOs 7.4下
#查看当前系统版本
uname -r
显示:3.10.0-693.2.2.el7.x86_64
#安装
yum -y install docker
#等待安装完成
安装完成
启动docker服务
service docker start
查看docker实例进程
docker ps
还未创建docker容器
运行测试
docker run hello-world
说明安装成功。
docker的使用:
输入命令:docker
看到docker 客户端的所有命令选项
例如要查看命令 docker ps的命令选项输入:
docker ps --help
使用docker容器
运行一个Python测试web
docker pull training/webapp
docker run -d -P training/webapp python app.py
参数说明:
-d:让容器在后台运行。
-P:将容器内部使用的网络端口映射到我们使用的主机上。
查看我们正在使用的容器
docker ps
可以看到容器的5000端口已被映射到32768端口,访问:
<span style="color:#000000">curl http://127.0.0.1:32768</span>
当然也可以用-p命令指定映射端口,
<span style="color:#000000">docker run -d -p 8081:5000 training/webapp python app.py</span>
<span style="color:#000000">curl http://127.0.0.1:8081</span>
docker ps 查看:
网络端口的快捷方式
通过docker ps 命令可以查看到容器的端口映射,docker还提供了另一个快捷方式:docker port,使用 docker port 可以查看指定 (ID或者名字)容器的某个确定端口映射到宿主机的端口号。
上面我们创建的web应用容器ID为:f26573a5163e名字为:awesome_wilson
我可以使用docker port f26573a5163e或docker port awesome_wilson来查看容器端口的映射情况
docker logs [ID或者名字] 可以查看容器内部的标准输出。
[root@stu ~]# docker logs -f a5aa660c9e4b
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
我们还可以使用 docker top 来查看容器内部运行的进程
[root@stu~]# docker top a5aa660c9e4b
UID PID PPID C STIME TTY TIME CMD
root 13978 13947 0 14:20 ? 00:00:00 python app.py
使用 docker inspect 来查看Docker的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
[root@stu~]# docker inspect a5aa660c9e4b
停止WEB应用容器
[root@stu ~]# docker stop f26573a5163e
f26573a5163e
重启WEB应用容器
[root@stu~]# docker start f26573a5163e
f26573a5163e
docker ps -l 查询最后一次创建的容器:
[root@stu~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f26573a5163e training/webapp "python app.py" 15 minutes ago Up About a minute 0.0.0.0:8081->5000/tcp awesome_wilson
正在运行的容器,我们可以使用 docker restart 命令来重启
我们可以使用 docker rm 命令来删除不需要的容器
删除容器时,容器必须是停止状态,否则会报如下错误:
[root@izwz91s2rh7xf6w39lnc4sz ~]# docker rm f26573a5163e
Error response from daemon: You cannot remove a running container f26573a5163ed217f1c8172120239d75718ff31b80af3f3e9be4923b4a47207b. Stop the container before attempting removal or use -f
Docker 镜像使用
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
下面我们来学习:
- 1、管理和使用本地 Docker 主机镜像
- 2、创建镜像
我们可以使用 docker images 来列出本地主机上的镜像。
[root@stu ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/hello-world latest f2a91732366c 4 months ago 1.85 kB
docker.io/training/webapp latest 6fae60ef3446 2 years ago 349 MB
各个选项说明:
-
REPOSITORY:表示镜像的仓库源
-
TAG:镜像的标签
-
IMAGE ID:镜像ID
-
CREATED:镜像创建时间
-
SIZE:镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
创建ubuntu镜像
docker run ubuntu:15.10 /bin/echo "Hello world"
获取一个新的镜像
当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。
docker pull ubuntu:15.10
查找镜像
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。
[root@izwz91s2rh7xf6w39lnc4sz ~]# docker search httpd
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/httpd The Apache HTTP Server Project 1583 [OK]
docker.io docker.io/hypriot/rpi-busybox-httpd Raspberry Pi compatible Docker Image with ... 40
docker.io docker.io/centos/httpd 15 [OK]
docker.io docker.io/centos/httpd-24-centos7 Platform for running Apache httpd 2.4 or b... 9
docker.io docker.io/armhf/httpd The Apache HTTP Server Project 8
docker.io docker.io/macadmins/netboot-httpd use in combination with bruienne/bsdpy 4 [OK]
docker.io docker.io/lolhens/httpd Apache httpd 2 Server 2 [OK]
docker.io docker.io/salim1983hoop/httpd24 Dockerfile running apache config 2 [OK]
docker.io docker.io/epflidevelop/os-wp-httpd WP httpd 1 [OK]
docker.io docker.io/fboaventura/dckr-httpd Small footprint http server to use with ot... 1 [OK]
docker.io docker.io/lead4good/httpd-fpm httpd server which connects via fcgi proxy... 1 [OK]
docker.io docker.io/rgielen/httpd-image-php5 Docker image for Apache httpd with PHP 5 b... 1 [OK]
docker.io docker.io/rgielen/httpd-image-simple Docker image for simple Apache httpd based... 1 [OK]
docker.io docker.io/tplatform/aws-linux-httpd24-php71-fpm aws-linux-httpd24-php71-fpm 1 [OK]
docker.io docker.io/dockerpinata/httpd 0
docker.io docker.io/efrecon/httpd A micro-sized httpd. Start serving files i... 0 [OK]
docker.io docker.io/fintaffy/fintaffy-httpd 0
docker.io docker.io/interlutions/httpd httpd docker image with debian-based confi... 0 [OK]
docker.io docker.io/jbpt/httpd 0 [OK]
docker.io docker.io/manageiq/httpd Container with httpd, built on CentOS for ... 0 [OK]
docker.io docker.io/manasip/httpd 0
docker.io docker.io/ppc64le/httpd The Apache HTTP Server Project 0
docker.io docker.io/publici/httpd httpd:latest 0 [OK]
docker.io docker.io/tplatform/aws-linux-httpd24-php70 aws-linux-httpd24-php70 0 [OK]
docker.io docker.io/trollin/httpd
NAME:镜像仓库源的名称
DESCRIPTION:镜像的描述
OFFICIAL:是否docker官方发布
拖取镜像
我们决定使用上图中的httpd 官方版本的镜像,使用命令 docker pull 来下载镜像。
docker pull httpd
我的阿里云主机只有1m带宽,比较慢,就不截图了。
下载完成后,我们就可以使用这个镜像了。
docker run httpd
创建镜像
当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
1.从已经创建的容器中更新镜像,并且提交这个镜像
2.使用 Dockerfile 指令来创建一个新的镜像
更新镜像
更新镜像之前,我们需要使用镜像来创建一个容器。
在运行的容器内使用 apt-get update 命令进行更新。
在完成操作之后,输入 exit命令来退出这个容器。
此时ID为f26573a5163e的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器副本。
docker commit -m="has update" -a="root"f26573a5163e root/ubuntu:v2
sha256:e26ca7cb3674a03a71875675f442100670413682c978713217567b9253a2103e
各个参数说明:
-m:提交的描述信息
-a:指定镜像作者
e218edb10161:容器ID
runoob/ubuntu:v2:指定要创建的目标镜像名
我们可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2:
查看 docker images
[root@stu ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
root/ubuntu v2 e26ca7cb3674 28 seconds ago 349 MB
docker.io/hello-world latest f2a91732366c 4 months ago 1.85 kB
docker.io/training/webapp latest 6fae60ef3446 2 years ago 349 MB
构建镜像
我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。