Docker

介绍

Docker的英文本意是“搬运工”,Docker搬运的是集装箱(Container)可以成为容器,我们可以把WEB应用以及依赖库打包进一个可移植的容器里传播,解决了应用部署的平台兼容性问题,同时她也是一种轻量级的虚拟化技术可以做到秒级启动一个容器(类似小虚拟机,区别启动快、可以传播);

镜像是docker 创建、启动一个容器的文件系统,这个文件系统包含依赖包、命令工具、APP等;

安装和开启服务

yum install epel-release -y  # 如果没有扩展源,需要先安装扩展源
yum install docker   # 安装,由于Docker要求Linux内核版本必须在要在3.10,所以centos6.X版本需要 yum install docker-io
systemctl start docker.service  # 开启服务
docker info  # 查看docker信息

镜像

修改镜像源

默认源连不上,修改镜像下载源,加入以下内容

vim etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

更多国内源如下:

# Docker 官方中国区
https://registry.docker-cn.com
# 网易
http://hub-mirror.c.163.com
# ustc
https://docker.mirrors.ustc.edu.cn

注意:docker版本在1.12以下需要找到docker配置文件
目录位置为/etc/default/docker,如果没有,那么就在/etc/sysconfig/docker,如果还是没有,那么就去/etc/default/下创建一个docker文件吧。

搜索镜像文件

docker search centos  # 搜索centos

拉取镜像

docker pull docker.io/centos  # 拉取 镜像名

删除镜像

docker rmi <镜像名|镜像ID>

容器

创建容器

进入交互式容器
docker run -i -t docker.io/centos /bin/bash  # -it可以连写
  • docker run 创建容器
  • -t 指定镜像
  • -i 交互式

进入交互式容器的/bin/bash后,可以输入常用的操作命令,比如ls

指定容器名
docker run --name <容器名> -it <镜像名> /bin/bash  # --name 指定容器名

端口映射

# 使用 -p 8000:80 创建端口映射(映射docker的80端口到物理机8000)
# docker run -d -p 8000:80 -p 22:22 同时映射多个端口,比如22给ssh服务用,80给Django用,即凡是需要提供给外部访问的,都需要作端口映射。
docker run --name ssh_server -it -p 8000:80 <镜像名> /bin/bash

注意:端口映射只能在docker run时操作

通过exit可以退出容器。

查看容器

docker ps  # 正在运行的容器
docker ps -a  # 所有的容器
docker ps -l  # 最近一次的容器
docker ps -q  # 最近一次的容器的id

查看容器详细信息

docker inspect <容器ID|容器名>

结果类似于json数据,可以通过| grep来过滤需要的信息

启动和关闭容器

docker start <容器名|容器ID>
docker stop <容器名|容器ID>

进入容器

进入容器前需要先启动

# 这种方式可以进入正在运行的容器,但是exit退出时容器也就停止运行了
docker attach <容器名|容器ID>
# 另一种方式进入容器,退出时容器不终止运行
docker exec -it test1 /bin/bash  # /bin/bash必须加

删除容器

# 删除一个容器
docker rm <容器名|容器ID>
# 强制删除一个正在运行的容器
docker rm -f <容器名|容器ID>
# 删除全部容器(使用 -f 可以强制删除正在运行的容器)
docker rm `docker ps -aq`

说明:飘号内的内容会作为命令来执行,并将结果交给rm命令

容器打包成镜像

docker save -o <导出的文件名.zip> <镜像名>  # 如果要指定路径,必须先创建路径中的文件夹

# 比如:
mkdir img
docker save -o /img/vimenv.zip vimenv.img

导入镜像

docker load < <镜像文件名.zip>  # < 记住别漏了重定向符号
  • 导入之后使用docker images查看镜像
  • 使用导入的镜像docker run来创建容器
  • 新的容器内含以前打包好的项目的数据,直接运行

docker中使用systemctl命令

centos7中通过systemctl启动服务,但是在docker中无法使用。解决方案:

1.启动参数参数用/usr/sbin/init

docker run --name ssh_server -p 8000:22 -p 80:80 -it vimenv.img /usr/sbin/init

这时会报错:Operation not permitted,不管它

2新开一个终端,docker ps查看刚刚启动的那个容器,docker stop 容器ID结束它

3重新启动容器 docker start

4运行容器

docker exec -it <容器ID|容器名> /bin/bash

5yum安装openssh-server等需要的服务,然后就可以通过systemctl启动服务了

通过端口映射访问docker

  • exec进入容器,passwd命令修改密码
  • Xshell或WinSCP软件连接宿主机ip,端口是创建容器时映射的端口,输入密码即可。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐