一.Docker的简单介绍
- Docker 是一个开源的应用容器引擎,
- 开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上
- 也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口;
- 由Docker客户端、Docker Daemon守护进程、Docker Image镜像、DockerContainer容器组成。
Docker 的优点
- 轻量级:所有容器在一台机器上共享同一个操作系统内核,这样他们立即开始,并更有效地利用内存。Image 是从分层文件系统的构建,这样他们能够共享公共文件,使得磁盘使用率和 Image 的下载更加高效。
- 开放:Docker 容器是基于开发的标准,允许容器运行在主流的 Linux 发布版和 Microsoft 操作系统作为所有的基础设施。
- 安全:容器使得应用程序彼此隔离,而基础架构同时为应用程序提供了额外的保护层。
Docker 与 虚拟机的区别
- 每个虚拟机都包括应用程序、必要的二进制文件和库以及一个完整的客户操作系统(Guest OS),尽管它们被分离,它们共享并利用主机的硬件资源,将近需要十几个 GB 的大小。
- 容器包括应用程序及其所有的依赖,但与其他容器共享内核。它们以独立的用户空间进程形式运行在主机操作系统上。他们也不依赖于任何特定的基础设施,Docker 容器可以运行在任何计算机上,任何基础设施和任何云上。
docker部署安装
下载安装包以及解决依赖
需要下载安装包:
docker-ce.x86、 docker-ce-cli.x86_64、 containerd.io.x86、container-selinux.noarch
阿里云开源镜像网站(在这里下能比较快一点,):http://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/、
也可以在官网进行下载:https://docs.docker.com/
安装docker,同时还会自动安装其他依赖软件,需要提前设置好系统yum源,可以使用7.3或者7.5的镜像源
yum install docker-ce.x86_64 docker-ce-cli.x86_64 containerd.io.x86_64 container-selinux.noarch
设置net.bridge.bridge-nf-call-iptables
[root@toto6 yum.repos.d]# sysctl -a |grep iptables
net.bridge.bridge-nf-call-iptables = 0
[root@toto6 yum.repos.d]# sysctl -w net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-iptables = 1
[root@toto6 yum.repos.d]# sysctl -p
该参数不进行设置,在使用docker网络桥接的话,会出现异常。
启动docker服务,并设置开机自动启动。
systemctl enable docker
systemctl start docker
安装成功之后查看docker信息
系认会自动产生一个docker网络接口
[root@toto6 yum.repos.d]# ip addr show
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:26:d0:11:de brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
查看docker安装版本信息
docker version
[root@toto6 yum.repos.d]# docker version # 查看版本的命令
Client: #docker客户端的信息
Version: 18.09.7
API version: 1.39
Go version: go1.10.8
Git commit: 2d0083d
Built: Thu Jun 27 17:56:06 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community # docker引擎的版本信息
Engine:
Version: 18.09.7
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: 2d0083d
Built: Thu Jun 27 17:26:28 2019
OS/Arch: linux/amd64
Experimental: false
docker info : 显示 Docker 系统信息,包括镜像和容器数
[root@toto6 yum.repos.d]# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 18.09.7
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 local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: bb71b10fd8f58240ca47fbb579b9d1028eea7c84
runc version: 2b18fe1d885ee5083ef9f0838fee39b62d653e30
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: toto6
ID: JGAB:PGSC:ZQKK:ZQ7W:IT2L:KDRI:V6XW:NTCI:YFDU:RMEW:UPJI:YZZX
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
Product License: Community Engine
WARNING: bridge-nf-call-ip6tables is disabled
docker常用命令
docker load -i 镜像名 #导入镜像
docker run -i --name 容器名 镜像名 #创建容器以镜像为模版
docker ps #查看运行的容器状态
docker ps -a #查看容器状态(包或不活跃的容器)
docker attach vm1 #连接容器
docker top vm1 #查看容器进程
docker logs vm1 #查看容器指令输出 -f参数可以实时查看
docker inspect vm1 # 查看容器详情
docker stats vm1 #查看容器资源使用率
docker diff vm1 #查看容器修改
docker stop vm1 #停止容器
docker start vm1 # 启动容器
docker kill vm1 #强制杀死容器进程
docker restart vm1 #重启容器
docker rm vm1 #删除容器
docker pause/uppause vm1 #暂停/恢复容器
docker 对镜像的所有操作命令
[root@toto6 ~]# docker image
build import load prune push save
history inspect ls pull rm tag
docker 对容器的所有操作命令
[root@toto6 ~]# docker container
attach create export logs port restart start top wait
commit diff inspect ls prune rm stats unpause
cp exec kill pause rename run stop update
docker 对volume的所有操作命令
[root@toto6 ~]# docker volume
create inspect ls prune rm
docker 对网络的所有操作命令
[root@toto6 ~]# docker network
connect create disconnect inspect ls prune rm
运行简单的容器
导入镜像
[root@toto6 images]# 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
运行容器:
[root@toto6 images]# docker run -d --name vm1 -p 80:80 game2048
c4e5e91a5042cc4a938e3cab2981e925edd2c1ec6bd9b741c83caf0245036d4d
##--name 是自己给容器的命名 -p作端口预设 物理机端口:docker 端口
##注意物理机端口必须是没被占用的,此时访问server宿主机的时候会直接到docker 容器
查看运行的容器
[root@toto6 images]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4e5e91a5042 game2048 "/bin/sh -c 'sed -i …" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, 443/tcp vm1
[root@toto6 images]# docker inspect vm1
浏览器访问查看运行结果: