A, docker base on which environment
- 64-bit CPU
- Linux kernel 3.10 above
- Linux Kernel support namespace and CGroups
Two, docker installation
1. Environmental follows
[root@docker ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
[root@docker ~]# uname -r
3.10.0-514.el7.x86_64
2. The words will default download from extras repository to download version 1.13 (I use the Ali mirror source) in. But now the docker is in a fast growing, fast sound stage, so it is recommended self docker.repo Download the latest version.
# 直接使用extras源下载docker以docker的安装包名就能下载,但使用指定源下载需要以docker-ce的安装包名。
[root@docker ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@docker ~]# yum makecache fast
[root@docker ~]# rpm --import https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[root@docker ~]# yum -y install docker-ce
3. Configure docker mirror accelerator, otherwise the mirror can be slow. You can use docker China, the major cloud vendors can also use a mirror to accelerate, where to Ali cloud , for example, you need to register an account before they can. docker default configuration files in / etc / docker Next, you need to manually create.
[root@docker ~]# mkdir /etc/docker
# 将上面阿里云镜像加速器中大括号部分复制到下面配置文件就可以了。内容以数组形式存在,所以按格式配置多个加速器也没关系。
[root@docker ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://p4y8tfz4.mirror.aliyuncs.com"]
}
Three, docker and start frequently used commands
1. Start docker
[root@docker ~]# systemctl start docker.service
# 键入docker命令查看帮助。
[root@docker ~]# docker
Usage: docker [OPTIONS] COMMAND
Options: # 参数
Management Commands: # 新版docker分的管理组(只列出部分内容)
container Manage containers
Commands: # docker一些未分组命令及旧版命令的整合
# 这里提一下新旧版docker命令。举个例子,创建容器命令是docker create,但是新版docker实行了命令分组,容器相关的命令都整合到container管理组里面了,这时创建容器的命令就是docker container create,可以使用docker container --help命令查看帮助。两者虽功能是一样的,但是万一哪天把旧版的拿掉了呢?所以不如早早适应新版命令。
2. Check the docker's C / S version information
[root@docker ~]# 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
...略
3. Check the docker's use of the information, only the removal of part of the configuration
root@docker ~]# 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 # 社区版本
4. Image Management
- Search Mirror
[root@docker ~]# 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列:没有斜线分隔的名字称为顶级仓库,一般属于dockerhub官方所有;有斜线分隔符的称为用户仓库或者是项目仓库,dockerhub官方允许用户个人注册账户建立自己的仓库。
# DESCRIPTION列:仓库描述
# STARS列:用户表示“赞”的个数
- Download Mirror. Own use docker download mirrors generally used alpine version , it can give your program run provide the basis for the environment, but the volume is very small. The production is not recommended, because even dockerhub official mirror is without debugging tools, debugging container which is very unfavorable to us, so are generally mirrored their own, containing commonly used debugging tools.
[root@docker ~]# docker image pull nginx:1.14-alpine
Status: Downloaded newer image for nginx:1.14-alpin
[root@docker ~]# docker image pull busybox
Status: Downloaded newer image for busybox:latest
[root@docker ~]# docker image pull redis
Status: Downloaded newer image for redis:latest
- View Mirror
[root@docker ~]# docker image ls
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
# REPOSITORY列:仓库名称
# TAG列:标签
# IMAGE ID列:镜像ID,查看完整ID需要加--no-trunc的参数,默认显示前12位。
# CREATED列:镜像创建时间
# SIZE列:镜像大小
- Remove Mirror
[root@docker ~]# docker image rm redis:latest
4. Container Managed
- Command Help
[root@docker ~]# docker container run --help.
-d # 后台运行容器.
-i # 使用交互式访问容器.
-t # 分配一个终端,需要与-i结合使用.
--name # 给容器分配个名字.
--network string # 使容器加入到一个网络,如不指定,默认就是加到bridge网络(可以使用docker network ls查看),使用docker0的虚拟网卡.
--rm # 容器一停,就自动删除.
- Create and start a container (one step)
[root@docker ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 64f5d945efcc 2 weeks ago 1.2MB
nginx 1.14-alpine 8a2fb25a19f5 7 weeks ago 16MB
# 直接创建、启动并登入容器(启动容器的镜像可以不用提前下载,执行run命令的时候会自动下载)
[root@docker ~]# docker run --name bbox -it busybox:latest
/ #
--------------------------------------------------------------------------------------------------------------
>>小测试:使用httpd起一个web服务进行访问<<
/ # mkdir -p /data/html/
/ # vi /data/html/index.html
Bbox httpd server
/ # httpd -f -h /data/html/
# 然后复制一个窗口访问web服务
[root@docker ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
24b44e5f1049 busybox:latest "sh" 3 hours ago Up 3 hours bbox
# 使用inspect显示容器的详细信息。
[root@docker ~]# docker container inspect bbox | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
[root@docker ~]# curl 172.17.0.2
Bbox httpd server # 访问OK
--------------------------------------------------------------------------------------------------------------
# 此时回到启动httpd的窗口,Ctrl+c中止进程,exit或者Ctrl+d退出容器,此时的容器并没有被删除,只是处于停止状态
/ # httpd -f -h /data/html/
^C
/ # [root@docker ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
24b44e5f1049 busybox:latest "sh" 3 hours ago Exited (130) 3 minutes ago bbox
- Start a container
# 如果容器是一个后台守护进程,那直接start就可以了,如果需要直接进入交互式接口,需要加-ai的参数
[root@docker ~]# docker container start -ai bbox
/ #
- Stop a container
# stop和kill区别就是:stop是发送15的信号,kill是发送9的信号。kill是强制杀死,有丢失数据的可能,所以一般不建议使用。
[root@docker ~]# docker container stop bbox
bbox
- Delete a container
[root@docker ~]# docker container rm bbox
bbox
- Start a container running in the background
[root@docker ~]# docker container run --name web01 -d nginx:1.14-alpine
c386de457f5fed770e97a080bbf7d2ce05cabd38199a9fc9072d08d920cf58f6
[root@docker ~]# docker container ls -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@docker ~]# docker container inspect web01 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
[root@docker ~]# curl 172.17.0.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title> # 访问成功
- Login container running in the background
[root@docker ~]# docker container exec -it web01 /bin/sh
/ #
- View access log container
# 一般情况下容器只会运行程序这一个进程,日志都是保存在于宿主机上的,可以用下面命令查看。
[root@docker ~]# docker container logs web01
172.17.0.1 - - [30/May/2019:07:12:43 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"