docker这个词还是第一次从在银联的同学那里听来的,感觉很好玩的样子,然后找了些资料学习了一会儿,当时主要是一些基本的操作命令,如安装docker、运行docker镜像、构建自己的镜像。巧的是现在这家公司就在用docker+kubernetes做服务治理,过完年后更是要在生产环境正式使用docker和kubernets, 所以在这里把之前学的一些基本操作记录下,主要是在linux上操作docker
- 什么是docker
docker是世界领先跨平台的开源容器引擎,它有助于快速地交付应用。能够将应用程序与基础设施层(运行环境、数据库等)隔离,并且能将基础设施当做程序进行管理。docker的使用可以更快地打包、测试、部署应用程序,缩短从编写到部署运行代码的周期。
- docker思想
- 集装箱
- 标准化 a. 运输方式 b. 存储方式 c. API接口
- 隔离
- docker解决了什么问题
让快速拓展、弹性伸缩变得简单。
- docker的架构
- Docker daemon (Docker守护进程)
- Client (Docker客户端)
- Images (Docker镜像)
- Container (容器)
- Registry (集中存储于分发镜像的服务)
- docker安装
-
系统要求 a. CentOS 7.X 之上 (CentOS 6.X 升级内核到3.8以上也能安装成功) b. 安装在64位平台
-
yum安装docker
root用户下安装
安装最新版docker
# yum -y install docker-io
ps:
docker.io ismaintained by Ubuntu
docker-engine ismaintained by Docker
若出现 No package docker available 则是yum没有找到docker包,更新epel第三方软件库,运行命令:
# yum install epel-release
安装指定版本的
# yum -y install docker-engine-<VERSION_STRING>
# yum -y install docker-engine-1.13.0
执行docker ps命令,出现
"Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running"
此时已确定Docker本身已经安装正常。
问题原因是因为docker服务没有启动,所以在相应的/var/run/ 路径下找不到docker的进程。
执行 service docker start 命令,启动docker服务,返回
配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
# sudo mkdir -p /etc/docker
# sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://0ei6y2se.mirror.aliyuncs.com"]
}
EOF
# sudo systemctl daemon-reload
# sudo systemctl restart docker
启动docker
# systemctl start docker / service docker start
查看docker安装版本
# docker version
卸载docker
# yum -y remove docker-engine
删除镜像、容器等
# rm -rf /var/lib/docker
搜索镜像
# docker search imagename
# docker search nginx
下载镜像
# docker pull imagename
# docker pull nginx
从指定的Docker Registry 下载指定标签的镜像
# docker pull hub.c.163.com/library/java:latest 从网易蜂巢镜像中心下载
列出镜像
# docker images
删除指定名称镜像
# docker rmi hello-world
删除所有镜像
# docker rmi -f $(docker images) -f表示强制删除
运行镜像
# docker run
# docker run java /bin/echo 'Hello World'
# docker run -d -p 8888:80 nginx 后台运行镜像 开放宿主主机的8888端口访问nginx
列出容器
# docker ps
停止容器
# docker stop containerId
强制停止容器
# docker kill containerId
启动已停止的容器
# docker start containerId
# docker restart
进入容器
- 直接进入
容器运行在后台,如果想进入它的终端
# docker attach containerId
- 获取容器的进程ID用nsenter 进入
# docker inspect --format "{{.State.Pid}}" $CONTAINER_ID
# nsenter --target "$PID" --mount --uts -ipc --net --pid
3.docker exec -it命令进入
使用“docker attach”命令进入container(容器)有一个缺点,那就是每次从container中退出到前台时,container也跟着退出了。
要想退出container时,让container仍然在后台运行着,可以使用“docker exec -it”命令。每次使用这个命令进入container,当退出container后,container仍然在后台运行,命令使用方法如下:
# docker exec -it containerId /bin/bash
/bin/bash 在container中启动一个bash shell
删除指定容器(需先停止运行)
# docker rm containerId
删除所有容器
# docker rm -f $(docker ps -a -q)