在之前的项目部署中,我们需要在linux服务器上安装python,nginx,uwsgi,redis, ,mysql等等,这是一个非常耗时的过程,可能要花费一天的时间,如果我们在以后迁移到其他服务器怎么办,难道要重新部署一次吗?!!!
为此我们可以使用docker技术,将所有的部署放在docker中,然后将docker打包,如果以后需要迁移,直接将镜像发送到服务器,一键启动
1.2 相关链接
Docker 官网:https://www.docker.com
Github Docker 源码:https://github.com/docker/docker-ce
-
-
容器:容器进程,应用程序以后封装在容器中运行,相互隔离
-
我们基于镜像运行容器,一个镜像可以运行多个容器实例,这样的话多个容器内的环境也是一模一样的
3.安装docker
3.1 下载
使用官方安装脚本自动安装
# 下载curl
sudo apt install curl
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 查看docker服务状态
sudo service docker status
# 重启docker服务
sudo service docker restart
# 关闭docker
sudo service docker stop
# 开启docker服务
sudo service docker start
sudo docker run hello-world
显示如下下界面代表安装成功
删除安装包:
sudo apt-get purge docker-ce
删除镜像、容器、配置文件等内容:
sudo rm -rf /var/lib/docker
5 操作docker
docker服务操作
sudo service docker start # 开启docker服务 sudo service docker stop # 关闭docker服务 sudo service docker restart # 重启docker服务 sudo service docker status # 查看docker服务状态
sudo docker images
包括:镜像名称 镜像ID 镜像创建时间 镜像大小
docker ps # 查看存活的容器 docker ps -a # 查看所有容器,包括已退出的容器
# 简单运行一下,通常会执行一下容器就会挂掉 docker run 镜像名称 # 交互式的运行一个的docker容器,-i:交互式命令, -t:开启一个终端 docker run -it 镜像名称 /bin/bash # 后台运行一个docker容器,并指定运行shell代码 -d:让容器后台运行, -c:运行的shell命令 docker run -d 镜像名称 /bin/sh -c "while true;do echo 辛苦了,学习linux; sleep 1;done" # 运行容器并指定名称 docker run --name xxx -it 镜像名称 /bin/bash # 运行容器并指定端口映射 docker run --name xxx -it 镜像名称 -p 6000:5000
# 运行容器并指定端口映射,文件夹映射
docker run --name xxx -it 镜像名称 -p 6000:5000 -v 宿主机目录:容器目录 -e 环境变量key:环境变量velue
# 运行容器并制定端口映射,文件夹映射和环境PATH映射
docker run --name xxx -it 镜像名称 -p 6000:5000 -v 宿主机目录:容器目录 -e
# 运行容器指定容器的网络模式
docker run -d --name xxx --net=host
# 进入一个存活的容器 docker exec -it 容器id /bin/bash
# 退出容器
exit
sudo docker run -d --name kunmzhao --net=host -it -e PYTHONPATH=/home/auto/code/tng-synlite:/home/auto/code/tngscripts -v /home/mars/kunmzhao:/home/auto/code/3pcc_scripts containers.cisco.com/synergy_lite/codestone_runner:3.7.45
docker run创建Docker容器时,可以用 --net 选项指定容器的网络模式 :
host模式:使用 --net=host 指定。 none模式:使用 --net=none 指定。 bridge模式:使用 --net=bridge 指定,默认设置。 container模式:使用 --net=container:NAME_or_ID 指定
对于已经创建好的容器操作
sudo docker start ID:启动一个已经停止的容器
sudo docker restaet ID:重启启动一个容器
sudo docker stop ID:停止一个正在运行的容器
sudo docker kill ID :强制杀死一个正在运行的容器
方式一:dockerhub获取,先搜索后下载
docker search 镜像名称docker pull 镜像名称
方式二:自己制作docker commit 容器id 新镜像名称
# 删除镜像要确保没有使用该镜像的容器,否则失败
docker rmi 镜像id
# 批量删除镜像
docker rmi `docker iamges -aq`
# 确保容器是未运行的 docker rm 容器id # 批量删除容器 docker rm `docker ps -aq`
docker logs 容器id
docker logs -f 容器id #实时刷新容器内的日志,例如检测nginx等日志信息
docker commit 容器ID 镜像名称
docker save 镜像id > 镜像的压缩文件
初次导入镜像没有tag,添加一个即可 docker load < 镜像的压缩文件 docker tag 镜像id 镜像新名称