一、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/bash
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" "-"
写作不易,转载请注明出处,谢谢~~