docker(二):docker基本使用

一、docker依赖的基础环境

  • 64-bit CPU
  • Linux kernel 3.10以上
  • Linux Kernel支持namespace和CGroups

二、docker安装

 1. 环境如下

[root@docker1 ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
[root@docker1 ~]# uname -r
3.10.0-693.el7.x86_64

 2. 默认下载的话会从extras库中下载1.13的版本(我用的阿里镜像源)。但是现在的docker正处于快速生长、快速健全的阶段,所以还是建议自建docker.repo文件下载最新的版本。

# 直接使用extras源下载docker以docker的安装包名就能下载,但使用指定源下载需要以docker-ce的安装包名。
[root@docker1 ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@docker1 ~]# yum -y install docker-ce

 3. 配置docker镜像加速器,否则镜像的速度会很慢。可以使用docker中国,也可以使用各大云厂商的镜像加速,此处以阿里云为例,需要先注册账户才可以。docker配置文件默认在/etc/docker下面,需要手动创建。

[root@docker1 ~]# mkdir /etc/docker
# 将上面阿里云镜像加速器中大括号部分复制到下面配置文件就可以了。内容以数组形式存在,所以按格式配置多个加速器也没关系。
[root@docker1 ~]# vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://p4y8tfz4.mirror.aliyuncs.com"]
}

三、docker启动及常用命令

基本信息

  • 启动docker
[root@docker1 ~]# systemctl start docker.service
# 键入docker命令查看帮助。
[root@docker1 ~]# docker
Usage:	docker [OPTIONS] COMMAND
Options:        # 参数    
Management Commands:        # 新版docker分的管理组(只列出部分内容)
  container   Manage containers
Commands:        # docker一些未分组命令及旧版命令的整合
  • 查看docker的C/S版本信息
[root@docker1 ~]# docker version
Client:
 Version:           18.09.6
 API version:       1.39
 Go version:        go1.10.8
...略

Server: Docker Engine - Community
 Engine:
  Version:          18.09.6
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.8
...略
  • 查看docker的使用信息,只摘取部分配置
root@docker1 ~]# docker info
Containers: 0        # 当前系统容器的个数
 Running: 0          # 处于运行状态的容器个数
 Paused: 0            # 处于暂停状态的容器个数
 Stopped: 0            # 处于停止状态的容器个数
Images: 0            # 下载的镜像个数
Server Version: 18.09.6        # docker的版本
Storage Driver: overlay2        # 存储驱动,之前这里是dm,性能很差,是lvm的实现,新版本的都是overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: false
Logging Driver: json-file        # 日志文件驱动
Cgroup Driver: cgroupfs        # CGroup驱动
Plugins:            # 支持的插件种类
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Registry Mirrors:            # 此处是我们配置的镜像加速器
 https://p4y8tfz4.mirror.aliyuncs.com/
Product License: Community Engine        # 社区版本

镜像管理

  • 搜索镜像
[root@docker1 ~]# docker search nginx
NAME                              DESCRIPTION                                     STARS               OFFICIAL    AUTOMATED
nginx                             Official build of Nginx.                        11472               [OK]                
jwilder/nginx-proxy               Automated Nginx reverse proxy for docker con…   1604                [OK]
richarvey/nginx-php-fpm           Container running Nginx + PHP-FPM capable of…   715                 [OK]
# NAME列:没有斜线分隔的名字称为顶级仓库,一般属于docker hub官方所有;有斜线分隔符的称为用户仓库或者是项目仓库,docker hub官方允许用户个人注册账户建立自己的仓库。
# DESCRIPTION列:仓库描述
# STARS列:用户表示“赞”的个数 
  • 下载镜像。自己使用docker下载镜像一般都是使用alpine版,它能够给你的程序运行提供基础环境,而且体积非常小。而生产中不建议使用,因为即便是docker hub官方的镜像也是不带调试工具的,这于我们调试容器很不利,所以一般都是自行制作镜像,包含常用的调试工具。
# 语法:docker image pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
[root@docker1 ~]# docker pull nginx:1.14-alpine
Status: Downloaded newer image for nginx:1.14-alpin
[root@docker1 ~]# docker pull busybox
Status: Downloaded newer image for busybox:latest
[root@docker1 ~]# docker pull redis
Status: Downloaded newer image for redis:latest
# 如果从第三方下载镜像,需要指明仓库地址,端口默认是https的443。
[root@docker1 ~]# docker pull quay.io/coreos/flannel
  • 查看镜像
# 所有非docker官方的镜像仓库名称都会是仓库地址+用户/项目名+镜像名
[root@docker1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              d3e3588af517        2 weeks ago         95MB
busybox             latest              64f5d945efcc        2 weeks ago         1.2MB
nginx               1.14-alpine         8a2fb25a19f5        7 weeks ago         16MB
quay.io/coreos/flannel   v0.11.0-amd64       ff281650a721        4 months ago        52.6MB
# REPOSITORY列:仓库名称
# TAG列:标签
# IMAGE ID列:镜像ID,查看完整ID需要加--no-trunc的参数,默认显示前12位。
# CREATED列:镜像创建时间
# SIZE列:镜像大小
  • 删除镜像
[root@docker1 ~]# docker rmi redis:latest

容器管理

  • 命令帮助
[root@docker1 ~]# docker run --help.
-d		# 后台运行容器.
-i        # 使用交互式访问容器.
-t        # 分配一个终端,需要与-i结合使用.
--name        # 给容器分配个名字.
--network string        # 使容器加入到一个网络,如不指定,默认就是加到bridge网络(可以使用docker network ls查看),使用docker0的虚拟网卡.
--rm		# 容器一停,就自动删除.
  • 创建并启动一个容器(一步到位)
[root@docker1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              64f5d945efcc        2 weeks ago         1.2MB
nginx               1.14-alpine         8a2fb25a19f5        7 weeks ago         16MBquay.io/coreos/flannel   v0.11.0-amd64       ff281650a721        4 months ago        52.6MB
# 直接创建、启动并登入容器(启动容器的镜像可以不用提前下载,执行run命令的时候会自动下载)
[root@docker1 ~]# docker run --name bbox -it busybox:latest
/ # 
--------------------------------------------------------------------------------------------------------------
>>小测试:使用httpd起一个web服务进行访问<<
/ # mkdir -p /data/html/
/ # echo 'Bbox httpd server' >/data/html/index.html
/ # httpd -f -h /data/html/
# 然后复制一个窗口访问web服务
[root@docker1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS   NAMES
24b44e5f1049        busybox:latest      "sh"                3 hours ago         Up 3 hours                  bbox
# 使用inspect显示容器的详细信息。
[root@docker1 ~]# docker container inspect bbox | grep IPAddress
            "IPAddress": "172.17.0.2",
[root@docker1 ~]# curl 172.17.0.2
Bbox httpd server		# 访问OK
--------------------------------------------------------------------------------------------------------------
# 此时回到启动httpd的窗口,Ctrl+c中止进程,exit或者Ctrl+d退出容器,此时的容器并没有被删除,只是处于停止状态
/ # httpd -f -h /data/html/
^C
/ # [root@docker1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
24b44e5f1049        busybox:latest      "sh"                3 hours ago         Exited (130) 3 minutes ago                                               bbox
  • 启动一个容器
# 如果容器是一个后台守护进程,那直接start就可以了,如果需要直接进入交互式接口,需要加-ai的参数
[root@docker1 ~]# docker start -ai bbox 
/ # 
  • 停止一个容器
# stop和kill区别就是:stop是发送15的信号,kill是发送9的信号。kill是强制杀死,有丢失数据的可能,所以一般不建议使用。
[root@docker1 ~]# docker stop bbox
bbox
  • 删除一个容器
[root@docker1 ~]# docker rm bbox 
bbox
  • 启动一个后台运行的容器
[root@docker1 ~]# docker run --name web01 -d nginx:1.14-alpine 
c386de457f5fed770e97a080bbf7d2ce05cabd38199a9fc9072d08d920cf58f6
[root@docker1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
c386de457f5f        nginx:1.14-alpine   "nginx -g 'daemon of…"   20 seconds ago      Up 19 seconds       80/tcp     web01
[root@docker1 ~]# docker inspect web01 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
[root@docker1 ~]# curl 172.17.0.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>            # 访问成功
  • 登入后台运行的容器
[root@docker1 ~]# docker exec -it web01 /bin/sh
root@c386de457f5f:/ 
  • 查看容器访问日志
# 一般情况下容器只会运行程序这一个进程,日志都是保存在于宿主机上的,可以用下面命令查看。
[root@docker1 ~]# docker logs web01 
172.17.0.1 - - [30/May/2019:07:12:43 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"


写作不易,转载请注明出处,谢谢~~

posted @ 2019-05-30 18:41  merlee  阅读(1014)  评论(2编辑  收藏  举报