一、 Docker的部署与安装
1.安装docker和相关依赖性
[root@server1 docker]# ls
container-selinux-2.21-1.el7.noarch.rpm
docker-ce-18.06.1.ce-3.el7.x86_64.rpm
libsemanage-2.5-8.el7.x86_64.rpm
libsemanage-python-2.5-8.el7.x86_64.rpm
pigz-2.3.4-1.el7.x86_64.rpm
policycoreutils-2.5-17.1.el7.x86_64.rpm
policycoreutils-python-2.5-17.1.el7.x86_64.rpm
[root@server1 docker]# yum install -y *
2.打开docker服务
[root@server1 ~]# systemctl start docker.service
3.在安装好docker后,系统会为docker容器分配一个ip,利用ip addr中查看docker0的ip
这个IP是为了容器通信用的,具体后面再说
4. 查看docker的版本信息
[root@server1 ~]# docker version
5. docker宿主机的信息
[root@server1 ~]# docker info
二、docker常用的基础命令
# docker load -i ubuntu.tar 导入镜像
# docker run -it --name vm1 ubuntu 创建容器(以ubuntu镜像为模板)
# 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 pause/unpause vm1 暂停/恢复容器
# docker rm vm1 删除容器
三、镜像的导入和容器的使用
实例一:简单搭建一个2048小游戏
1.导入镜像game2048.tar
[root@server1 ~]# docker load -i game2048.tar
2.查看镜像信息
[root@server1 ~]# docker images
3.创建容器vm1,并运行
[root@server1 ~]# docker run -d -p 80:80 --name vm1 game2048
上面命令的功能为创建名为【vm1】的容器;并将本机80端口映射到容器的80端口,通过本机80端口访问容器内部;运行容器并打入后台
参数 | 功能 |
---|---|
-d | 打入后台 |
-p | 端口映射 |
- -name | 指定容器的名字 |
这里特别要提到docker的端口映射。
我们使用以下命令可以看到在创建容器时有很多的参数,其中关于端口的参数有【-p】与【-P】
[root@server1 ~]# docker run --help
当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p或-P参数来指定端口映射。
当使用-P(大写P)标记时,Docker会随机映射一个端口到内部容器开放的网络端口(端口范围在Linux系统使用的端口之外,一般都过万)
当使用-p(小写p)可以指定要映射的端口,并且在一个指定的端口上只可以绑定一个容器。
支持的格式有:IP:HostPort:ContainerPort | IP::ContainerPort | HostPort:ContainerPort 。
4.查看容器运行状态
[root@server1 ~]# docker ps
5.查看容器信息
[root@server1 ~]# docker inspect vm1
6.浏览器访问
172.25.6.1(本机IP,因为我们做了端口映射,所以只需访问本机的80端口即可到达容器vm1内部)
2048游戏就这样轻松上线,其实当我们执行完【docker run】命令以后就已经完成了上线,后续的操作也只是为了查看相关信息而已;这样看来,我们上线一个应用就只用了两步,非常方便,这也是为什么如今docker这么火爆的原因
实例二:快速搭建nginx
1.导入镜像,并创建容器vm1
[root@server1 ~]# docker load -i nginx.tar
[root@server1 ~]# docker run -d --name vm2 -p 8080:80 nginx
##因为本机80端口已经被2048游戏占用,所以我们指定8080端口
[root@server1 ~]# docker ps -a
3.测试
http://172.25.6.1:8080/
4. 编写一个默认发布页面,并cp到容器内部
[root@server1 ~]# ls
game2048.tar nginx.tar
[root@server1 ~]# vim index.html
[root@server1 ~]# cat index.html
<h1/>hello world<h1/>
[root@server1 ~]#
[root@server1 ~]# docker cp index.html vm2:/usr/share/nginx/html
5.也可以直接挂载本机目录到容器里
删除之前的容器vm2
[root@server1 ~]# docker rm -f vm2
[root@server1 ~]# mkdir /tmp/docker ##创建挂载目录
通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径;当然也可以指定挂载目录的权限
docker run -d -p 8080:80 --name vm2 -v /tmp/docker/:/usr/share/nginx/html/ nginx
docker run -d -p 8080:80 --name vm2 -v /tmp/docker/:/usr/share/nginx/html/:ro nginx
在挂载目录里编辑发布内容
[root@server1 ~]# cd /tmp/docker/
[root@server1 docker]# ls
[root@server1 docker]#
[root@server1 docker]# vim index.html
[root@server1 docker]# cat index.html
<h1/>snow snow snow<h1/>
实例三:利用docker创建一个交互式容器
1.导入ubuntu镜像
[root@server1 ~]# docker load -i ubuntu.tar
2.生成并运行容器
[root@server1 ~]# docker run -it --name vm3 ubuntu
##创建一个vm3的镜像,-it表示打开交互式docker界面(ubuntu自带,rhel镜像需要在后面再加bash)
容器vm3的内核版本与宿主机的内核版本一致
root@b179b778d2cf:/# uname -r
3.10.0-514.el7.x86_64
[root@server1 ~]# uname -r
3.10.0-514.el7.x86_64
命令补充:
ctrl + pq ##退出容器但不关闭容器
[root@server1 ~]# docker attach vm3 ##进入容器
ctrl + D ##退出并关闭容器,下次登陆时需要开启
[root@server1 ~]# docker start vm3 ##打开关闭的容器
docker rm vm3 删除容器
docker rm -f vm2 强制删除容器
docker rmi ubuntu:vm3 删除镜像