简介
什么是Docker?
Docker是开发人员和系统管理员使用容器开发、部署和运行应用程序的平台。使用Linux容器来部署应用程序称为集装箱化。使用docker轻松部署应用程序
Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题。
总体来说,Docker的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样
部署安装
Centos7上安装docker
依赖安装:
yum install -y yum-utils device-mapper-persistent-data lvm2
-阿里源安装:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
docker安装:
yum install docker-ce # 安装指定版本,例如yum install -y docker-ce-19.03.9
启动并加入开机自启
systemctl start docker
systemctl enable docker
修改docker数据存放目录位置(默认目录是/var/lib/docker,这里防止/目录满我修改到数据盘内)和镜像加速
vim /etc/docker/daemon.json
{"graph":"/data/docker",
"registry-mirrors":["https://01xxgaft.mirror.aliyuncs.com"]}
重启docker载入新配置:
systemctl restart docker
基本使用
这里可以docker --help查看所有用法,下面是比较常用的
镜像获取查看
镜像搜索:
docker search 想搜索的镜像包名
(例如:docker search nginx
)- 镜像下载:
docker pull 想下载的镜像包名
(例如:docker pull nginx
) - 查看本地所有的镜像:
docker image ls
容器启动和管理
- 容器启动:
docker run -d 镜像名
(直接后台启动容器 例如:docker run -d nginx
) - 容器交互模式启动:
docker run -d -ti 镜像名 /bin/bash
(使用交互模式启动容器 例如:docker run -d -ti centos /bin/bash
) - 容器启动打上标记名:
docker run -d --name=标记名 镜像名
(给容器打上标记名 例如:docker run -d --name=test_nginx nginx
) - 容器启动映射端口:
docker run -d -p 需要映射的宿主机端口:容器端口 镜像名
(将容器端口映射到宿主机 例如:docker run -d -p 8080:80 nginx
这里就将容器的80端口映射到了宿主机的8080端口) - 进入容器内部:
docker exec -ti 镜像名 /bin/bash
(进入容器内部 例如:docker exec -ti centos /bin/bash
推出时按住ctrl不放,另一个只手按p,然后再按q,这样就是安全退出,容器也不会死掉,如果是用交互模式运行的,直接exit退出就行)
镜像和容器的查看停止与删除
- 查看正在运行的容器,这里会显示各种信息:
docker ps
- 显示所有的容器,包括已经停止运行的:
docker ps -a
- 停止容器:
docker stop 容器id或者标记的name
(这里id可以docker ps 看到,标记的name是启动时你设置的,例如停止上图的nginx:docker stop 7baea3ea0701
或docker stop nginx_test1
) - 删除容器:
docker rm 容器id或者标记的name
(主要用于删除已经停止运行的容器,但是容器必须是停止状态才能删除,例如:docker rm 7baea3ea0701
或docker rm nginx_test1
) - 删除镜像:
docker rmi 镜像名
(主要用于删除镜像 例如:docker rmi nginx
)
镜像的各种打包
- 将当前运行的容器状态打包成镜像:
docker commit -m '提交内容' -a '提交人' 已启动并修改过的容器名 新的镜像名以及版本号
已启动并修改过的容器名 新的镜像名以及版本号 (主要用于将运行中的容器进入内部修改后将其打包成新的镜像) - 这里我拿上图的nginx来打包 例如:docker commit -m 'test' -a 'test' nginx_test1 nginx:testv1.0.0
- 使用dockerfile打包:
docker build -t 新的镜像名以及版本号 目录位置
(这里是使用dockerfile进行打包,需要新建一个目录并在里面创建一个Dockerfile文件) - 例如,我新建一个nginxfile目录mkdir nginxfile &&; cd nginxfile && touch Dockerfile
- 编辑Dockerfile内容,格式为- FROM 镜像名 RUN 打包过程中执行的命令,可以有多个,当有多个时用一条RUN,然后用 && 和 \ 来连接,否则或创建多层镜像 CMD 运行容器时执行的命令,只能有一个生效- 注意:CMD内的内容必须是前台运行的程序,否则后台后容器会挂掉,因为容器启动时会记住CMD后面这个命令执行的pid,并将其标识为1,如果该进程没有存活,容器会认为任务已经运行结束,会自动挂掉,上面我将nginx前台启动
镜像的导入导出
- 镜像文件导出:
docker save -o 保存的文件位置 镜像名
(例如:docker save -o /tmp/nginx.tar.gz nginx
) - 镜像文件导入:
docker load < 镜像包位置
(例如docker load < /tmp/nginx.tar.gz nginx
)
容器和宿主机的数据交互
- 拷贝文件:
docker cp 文件位置 容器id或标记的name:容器内位置
(将宿主机内文件拷贝到容器内,也可以反着来将容器内文件拷贝出来,例如:docker cp /tmp/1.txt nginx_name:/tmp/
反向拷贝:docker cp nginx_name:/tmp/ /tmp/1.txt
) - 挂载本地目录:
docker run d -v 宿主机目录:容器内目录 镜像名
(将本地目录映射挂载到容器内目录,例如:docker run d -v /tmp/logs:/data/logs nginx
)
如果觉得该文章对你有帮助的话请给我点个👍吧,感谢
版权归原作者 Anime777 所有, 如有侵权,请联系我们删除。