作者: 麦冬 锻石
基础部分
安装
看Docker操作手册
写的很详细
二进制安装
一般安装方法
这里说下二进制安装,按照官网方式Install static binaries
安装docker在Centos基本上就是yum install即可的一件事情(在ubuntu也是apt-get很容易安装),但是在实际环境中,可能遇到企业内网之内无法连接,或者安全合规审查等问题,加之下载增加了安装时间,因此二进制方式安装变成了一种实际的需要。下面是官网的安装方式
有些时候会在sudo docker &
时候出现错误
可以执行以下下面命令再试。
rm -rf /var/lib/docker
脚本傻瓜式安装
这里提供写好的脚本,可以把脚本和下载的二进制文件放在同一目录下,然后运行sh install-docker.sh
项目 | 下载地址 |
---|---|
二进制方式安装docker脚本 | http://osgp88fat.bkt.clouddn.com/docker/install-docker.sh |
二进制的docker安装文件 | https://download.docker.com/linux/static/stable/x86_64/ |
程序是否正常
sudo docker info
运行容器
docker run
命令提供了Docker容器的创建到启动的功能
如果要在命令行下创建一个我们能与之进行交互的容器,而不是一个运行后台服务的容器,则-i
-t
这两个参数是必不可少的基本参数。
apt-get update && apt-get install vim //在容器中安装vim
exit // 推出容器,返回到Ubuntu容器的宿主机命令行提示符中
查看当前系统中容器列表
sudo docker ps -a
加上-a
会显示正在运行的 和已经停止的所有容器
容器命名
一般docker会为创建的容器生成随机名称,生成指定名称用--name
sudo docker run --name jxtreehouse -i -t ubuntu /bin/bash
附着到容器上
像上面那样,docker容器重新启动时候,会沿用docker run
命令的参数来运行,因此我们容器重新启动后会运行一个交互式会话shell。
当然,我们也可以用docker attach
命令 重新附着到该容器的会话上
sudo docker attach jxtreehouse
创建守护式容器
除了交互式
运行的容器,我们也可以创建长期运行的容器:守护式容器
特点:
- 没有交互会话
- 非常适合运行应用程序和服务
所以,大多数时候我们都需要守护式运行我们的容器
sudo docker run --name jxbooks -d ubuntu /bin/sh -c "while true;do echo hello jx;sleep 1; done"
从上面运行结果我们可以看出,docker run
命令并没有像上一个容器那样将主机的控制台附着到新的shell会话上,仅仅返回一个容器ID而已,我们还是在主机的命令中。
容器内部运行情况
### 查看日志
sudo docker jxbooks
sudo docker logs jxbooks // 获取守护式容器日志
sudo docker logs -f jxbooks // 跟踪守护式容器的日志(-f 类似 tail -f)
sudo docker logs -ft jxbooks // 跟踪守护式容器的最新日志 (加上时间戳)
查看容器内的进程
sudo docker top jxbooks
在容器内部运行进程
在Docker3.1之后,我们可以通过docker exec
命令在容器内部额外启动新程序。
可以在容器内运行的进程有两种:
- 后台任务
- 交互式任务
后台任务例子:
sudo docker exec -d jxbooks touch /etc/new_config_file
在jxbooks容器中启动一个如打开shell的交互任务:
sudo docker exec -t -i jxbooks /bin/bash
和交互式容器一样,这里-t
-i
标志为我们执行的进程创建TTY并捕捉STDIN。
停止守护式容器
sudo docker stop jxbooks
jxbooks
也可用容器的ID来替代(查看id 可用 docker ps -a
)
自动重启容器
sudo docker run --restart=always --name jxbooks -d ubuntu /bin/sh -c "while true; do echo hello world; sleep1;done"
--restart=always
无论容器的退出代码是什么,docker都会自动重启容器
还可以设置成 on-failure
(只有当容器退出代码为非 0 时候 才会自动重启)
--restart=on-failture:5 //重启次数参数
深入容器
sudo docker inspect jxbooks
删除容器
sudo docker rm 容器名或id //注意运行中的docker容器无法删除,必须先docker stop 或者 docker kill 停止容器
删除所有容器
docker rm `docker ps -a -q`
导入docker镜像并开发
在合作开发时候,我们拿到一个项目打包好的docker镜像(原开发环境为ubuntu,我们这里拿到镜像后 还用ubuntu做演示,实际开发时候,你可能是在windows 或者centos中拿到这个项目镜像来开发)
比如压缩包名datascreen.tar
我们在根目录/
data文件夹中建一个docker
文件夹,进入文件夹,新建tmp
文件夹 ,在docker
同级目录下新建 datascreen
文件夹 我们将把项目docker镜像文件映射到这里
导入容器
sudo docker load < ${PATH}/datascreen.tar //加载docker打包的镜像 到本宿主机
运行Docker
sudo docker images //获取image ID
sudo docker run -d -it -p 7001:7001 -v /data/docker/tmp/:/tmp/ {image id} /bin/bash
/data/docker/tmp/
映射到的宿主机上的目录/tmp/ {image id} /bin/bash
镜像中的目录
启动容器
sudo docker ps //查看运行中的容器
sudo docker start f1737f42f13b //f1737f42f13b 是容器id
sudo docker exec -it f1737f42f13b /bin/bash
运行data-screen
cd data-screen/
nohup ./auto-run.sh &
auto-run.sh
脚本中的内容,主要是启动mongod 和用node启动入口文件index.js (这个项目是一个nodejs的后台项目)
停止docker 容器
(!危险)
如果是运行在应用上的程序和服务的守护式容器 注意不要随意停止
sudo docker ps
sudo docker stop <CONTAINER ID>