1.Docker介绍:
(1)什么是Docker?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口;
由Docker客户端、Docker Daemon守护进程、Docker Image镜像、DockerContainer容器组成。
(2)Docker的应用场景
web应用的自动化打包和发布;
自动化测试和持续集成、发布;
在服务型环境中部署和调整数据库或其他的后台应用;
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境
(3)传统虚拟机化与容器技术对比
2.Docker的部署:
(1)下载所需软件:
docker-ce.x86、 docker-ce-cli.x86_64、 containerd.io.x86、container-selinux.noarch
软件包下载: https://mirros.aliyun.com/
(阿里云开源镜像网站)
解决软件依赖性:pkgs.org
(2)将下载好的软件统一放在一个文件夹内,配置docker 的yum仓库
vim /etc/yum.repos.d/docker.repo
[docker]
name=docker-ce
baseurl=http://172.25.33.250/pub/docs/docker
gpgcheck=0
(3)下载docker,并开启
yum install docker-ce
systemctl start docker
systemctl enable docker
(4)下载好docker,查看具体信息
系认会自动产生一个docker网络接口
[root@server1 yum.repos.d]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:3b:fd:24 brd ff:ff:ff:ff:ff:ff
inet 172.25.33.1/24 brd 172.25.33.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe3b:fd24/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:43:ae:3a:71 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安装版本信息
[root@server1 ~]# docker version
Client:
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
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@server1 ~]# docker info
Containers: 13
Running: 9
Paused: 0
Stopped: 4
Images: 21
Server Version: 18.09.7
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
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-862.el7.x86_64
Operating System: Red Hat Enterprise Linux Server 7.5 (Maipo)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.953GiB
Name: server1
ID: LWQC:RSPE:2FRR:YDYZ:NO4V:O4RL:KPS6:BCYH:Z6LC:QM6E:7UBS:ARM6
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:
172.25.33.1
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine
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@server1 ~]# docker image
Usage: docker image COMMAND
Manage images
Commands:
build Build an image from a Dockerfile
history Show the history of an image
import Import the contents from a tarball to create a filesystem image
inspect Display detailed information on one or more images
load Load an image from a tar archive or STDIN
ls List images
prune Remove unused images
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rm Remove one or more images
save Save one or more images to a tar archive (streamed to STDOUT by default)
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
Run 'docker image COMMAND --help' for more information on a command.
docker 对容器的所有操作命令
[root@server1 ~]# docker container
Usage: docker container COMMAND
Manage containers
Commands:
attach Attach local standard input, output, and error streams to a running container
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
exec Run a command in a running container
export Export a container's filesystem as a tar archive
inspect Display detailed information on one or more containers
kill Kill one or more running containers
logs Fetch the logs of a container
ls List containers
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
prune Remove all stopped containers
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
run Run a command in a new container
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
wait Block until one or more containers stop, then print their exit codes
docker 对volume的所有操作命令
[root@server1 ~]# docker volume
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes
3.简单容器的运行示例:
以game2048为例
(1)获取game2048镜像,并导入:
[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
[root@server1 ~]# docker images ##查看存在的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
game2048 latest 19299002fdbe 2 years ago 55.5MB
(2)创建容器,并进行端口映射
[root@server1 ~]# docker run -d --name vm1 -p 80:80 game2048 ##-d打入后台 -p制定端口 宿主机的端口:docker端口
1d4fab18792eb4faf2147d10b06bd823de7c61f5e9805da72ecaa2fb28567118
[root@server1 ~]# docker ps ##查看docker进程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1d4fab18792e game2048 "/bin/sh -c 'sed -i …" 15 seconds ago Up 14 seconds 0.0.0.0:80->80/tcp, 443/tcp vm1
[root@server1 ~]# netstat -tnlp ##会看到开了一个80端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 859/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 883/master
tcp6 0 0 :::80 :::* LISTEN 1743/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 859/sshd
tcp6 0 0 ::1:25 :::* LISTEN 883/master
(3)浏览器访问:172.25.33.1,运行成功!!!