一.docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
DockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器
docker架构:
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。
Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。
二.搭建docker
1.获取docker安装包并安装
2.打开docker,查看相关信息
[root@server1 docker]# systemctl start docker.service
[root@server1 docker]# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 18.06.1-ce
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-514.el7.x86_64
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 992.7MiB
Name: server1
ID: OADG:XF6V:ABNB:VH5H:EWVI:CEBS:6UEW:HTSC:WNDB:EZZC:IUSA:XQ5Y
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
注意:docker初始化会刷新防火墙,不要重启防火墙防止后面的端口影射出现问题
三.运行2048小游戏
1导入2048镜像
[root@server1 ~]# ls
docker game2048.tar
[root@server1 ~]# docker load -i game2048.tar
011b303988d2: Loading layer [==================================================>] 5.05MB/5.05MB
36e9226e74f8: Loading layer [==================================================>] 51.46MB/51.46MB
192e9fad2abc: Loading layer [==================================================>] 3.584kB/3.584kB
6d7504772167: Loading layer [==================================================>] 4.608kB/4.608kB
88fca8ae768a: Loading layer [==================================================>] 629.8kB/629.8kB
Loaded image: game2048:latest
2.查看是否导入成功
[root@server1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
game2048 latest 19299002fdbe 2 years ago 55.5MB
3.创建容器
[root@server1 ~]# docker run -d -p 80:80 --name vm1 game2048
##-d是打入后台,–name表示为这个容器起了一个名字为vm1 前面的80是server1这个物理机的端口。后面的80是容器的端口
a5d01a3defddac9ac1913affd4618aee09a07400ffdb087da55791d2b1899451
4.查看容器状态
[root@server1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a5d01a3defdd game2048 "/bin/sh -c 'sed -i …" 7 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp, 443/tcp vm1
5.测试:
在浏览器访问172.25.31.1
四.docker常用命令
docker load -i game2048.tar 导入镜像
docker run -d -p 80:80 --name vm1 game2048 创建容器,其中以game2048为镜像,添加端口映射
docker ps ##查看可用容器
docker ps -a 查看所有容器,包括可用的和没有正常退出容器导致容器不可用的
docker attach vm1 进入容器
docker top vm1 查看容器进程
docker logs vm1 查看容器指令输出
docker inspect vm1 查看容器详细信息
docker status vm1 查看容器的资源使用率
docker diff vm1 查看容器的修改
docker stop vm1 停止容器
docker start vm1 启动容器
docker kill vm1 强制停止容器
docker rm -f vm1 删除容器,后面也可直接输入容器id
docker rmi 删除镜像
ctrl+pq 结束docker与内核的交互式界面,但不停止容器,在后台运行的
ctrl+d 直接结束容器,释放内存,但是镜像还在,只是在可用容器里面查不到,但是在所有容器里面还是可以查看到容器信息的