什么是Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
和虚拟机的区别

组成
Docker是一个C/S结构,由镜像,容器和仓库组成
容器是由镜像实例化而来,这和我们学习的面向对象的概念十分相似,我们可以把镜像看作类,把容器看作类实例化后的对象。
应用场景
- 简化配置
- 提高开发效率,不用部署环境
- 快速部署
- 代码流水线
- 开发调试
- 产品发布模式
- 分布式集群
- 存储过程储备数据
docker安装使用
使用docker前先sudo su 进入root超级用户
ubuntu安装docker
$ apt install -y docker.io
docker帮助文档
$ docker [options] --help
查看版本
$ docker -v
查看docker属性
$ docker info
docker启动
$ /etc/init.d/docker start
搜索centos镜像,第一个是官方镜像
$ docker search centos
拉取centos镜像
$ docker pull centos
如果拉取镜像出现TLS handshake timeout
的报错,需要更换为国内镜像
https://blog.csdn.net/hhyihquk1/article/details/84099336
查询本地已存在的镜像
$ docker images
删除镜像
$ docker rmi [IMAGE ID]
运行centos容器echo命令
$ docker run centos /bin/echo "Hello World"
查看docker最新的容器
$ docker ps -l
运行并进入docker容器
$ docker run -it --name mydocker centos /bin/bash
在后台运行docker容器,如果没有该镜像会先下载
$ docker run -d --name myngixn nginx
启动/停止/删除容器进程
$ docker start 48bc8ba89baf
$ docker stop 48bc8ba89baf
$ docker rm 48bc8ba89baf # 删除前需要先停止容器进程
批量停止/删除容器
$ docker stop $(docker ps -a -q)
$ docker rm $(docker ps -a -q)
$ sudo docker rm `docker ps -a|grep Exited|awk '{print $1}'`
进入docker容器
$ docker attach 5e9a3378955e # 这种方式往往会失败,查看docker
$ docker inspect --format "{{.State.Pid}}" mynginx # 先获取pid
$ nsenter --target 4281 --mount --uts --ipc --net --pid # 再挂载进入
将进入docker容器做成脚本
#!/bin/bash
CNAME=$1
CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME)
nsenter --target "$CPID" --mount --uts --ipc --net --pid
./in.sh mynginx
返回docker对象信息
docker inspect volume-test1
格式化输出docker对象信息
docker inspect -f {{.Config.Volumes}} volume-test1
docker inspect volume-test1 | grep Mounts -A 10
docker网络访问
端口映射
随机映射
docker run -d -P --name mynginx nginx
指定映射
docker -d -p 91:80 --name mynginx1 nginx
docker数据管理
数据卷
-v /data
-v src:dst
数据卷示例
docker run -it --name volume-test1 -h centos -v /data centos # 随机映射
docker run -it --name volume-test2 -h centos -v /opt:/opt centos # 指定映射
docker run -it --name volume-test3 -h centos -v /opt:/opt:ro centos # /opt:/opt:ro是只读,针对docker容器的只读,不影响物理主机
https://blog.csdn.net/qq_34173549/article/details/80400454 数据映射翻车记录
数据卷容器
--volumes-from
数据卷容器示例
docker run -it --name volume-test5 --volumes-from volume-test4 -h centos centos
docker镜像构建
镜像构建实战(构建nginx镜像):
yum install -y wget gcc gcc-c++ make openssl-devel
wget http://nginx.org/download/nginx-1.17.5.tar.gz
wget ftp://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz
mv *.gz /usr/local/src
cd /usr/local/src/
tar zxvf nginx-1.17.5.tar.gz
tar zxvf pcre-8.43.tar.gz
cd nginx-1.17.5
./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/src/pcre-8.43
make
make install
vi /usr/local/nginx/conf/nginx.conf
# daemon off;
# 退出镜像
docker commit -m "my nginx" 02b39f5b9e8c chenzejian/nginx:v1
docker images
docker run -d -p 99:80 chenzejian/nginx:v1
浏览器运行 http://192.168.1.126:99/
网友评论