linux下的docker操作笔记
docker是一个很流行的容器服务,比逻辑虚拟机更加简单和移植方便!
三个概念:
- 镜像(IMAGE):简而言之,一个只读模板,可被无限实例化
- 容器(CONTAINER):一个从模板克隆出来的实例,轻量级可执行的独立软件包
- 仓库(REPOSITORY):将容器打包成为一个别人的镜像放置的容身之所
本笔记直接从代码说起,基本上囊括了你会用到的所有docker操作命令。
说明
docker的logo,就是一个背着一堆集装箱的大鲸鱼,这已经很形象说明docker是什么东西了!
以下的IMAGE_NAME和CONTAINER_NAME 请根据实际情况替换成对应的镜像名和容器名。
常用命令
运行Docker守护进程:systemctl start docker
停止Docker守护进程:systemctl stop docker
重启Docker守护进程:systemctl restart docker
设置Docker开机自启动:systemctl enable docker
列出所有镜像:docker images
列出运行中的容器:docker ps
列出创建的所有容器:docker ps -a
启动容器:docker start CONTAINER_NAME/CONTAINER_ID
重启容器:docker restart CONTAINER_NAME/CONTAINER_ID
停止容器:docker stop CONTAINER_NAME/CONTAINER_ID
守护进程开启容器:docker run -d --name ALIAS_CONTAINER_NAME IMAGE_NAME
进入后台守护中运行的容器:docker exec -it IMAGE_NAME /bin/bash
创建容器映射端口停止就删:docker run --rm --name nginxtest -p 8081:81 -d nginx
查看容器最近的100条日志:docker logs -f -t --tail=100 CONTAINER_NAME
查看容器的运行状态:docker stats -a
安装 docker
使用的是官方步骤的翻译版
清除旧版本docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装yum工具
sudo yum install -y yum-utils
配置docker源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装 Docker
sudo yum install docker-ce docker-ce-cli containerd.io
以下表示成功安装:
Installed:
container-selinux-2:2.124.0-1.module_el8.2.0+305+5e198a41.noarch containerd.io-1.3.9-3.1.el8.x86_64
docker-ce-3:19.03.14-3.el8.x86_64 docker-ce-cli-1:19.03.14-3.el8.x86_64
libcgroup-0.41-19.el8.x86_64
Complete!
安装其他版本更多内容,请参考官方教程,有很多可选的配置和拓展。
启动 Docker
systemctl start docker
查看安装信息
docker info
拉取helloword测试镜像并启动容器
docker run hello-world
附:卸载docker
卸载包:sudo yum remove docker-ce docker-ce-cli containerd.io
删除配置资源目录:sudo rm -rf /var/lib/docker
管理镜像 IMAGES
查看镜像
docker images
拉取镜像
语法:docker pull [镜像地址/]镜像名[:版本标签名]
以 Docker Hub 的 Nginx 镜像为例:docker pull nginx
以上同等于:docker pull docker.io/nginx:latest
修改标签(方便记忆):docker tag docker.io/nginx:latest chinacloud/nginx:v1
删除镜像
docker rmi IMAGE_NAME
强制删除镜像:docker rmi -f IMAGE_NAME
使用容器 CONTAINER
容器的状态主要有7种:
被创建 created
重启中 restarting
运行中 runing 或 Up
迁移中 removing
暂停 paused
退出停止 exited
消亡 dead
查看容器
查看运行中的容器:docker ps
查看所有容器(含停止中未删除的):docker ps -a
对已存在的容器操作
启动容器:docker start CONTAINER_NAME/CONTAINER_ID
重启容器:docker restart CONTAINER_NAME/CONTAINER_ID
停止容器:docker stop CONTAINER_NAME/CONTAINER_ID
创建并启动容器
创建容器:docker run -d IMAGE_NAME
启动容器:docker run -it IMAGE_NAME /bin/bash
退出容器:exit
进入后台运行的容器:docker exec -it IMAGE_NAME /bin/bash
设置随着docker启动:docker container update --restart=always NGINX_IMAGE_NAME
加别名运行:--name ALIAS_CONTAINER_NAME
若出现容器一运行就停止的情况,是因为容器里面内部没有前台运行任务而自杀线程了,可以创建容器的时候执行:docker run -d --name CONTAINER_NAME IMAGE_NAME /bin/bash -c "tail -f /dev/null"
删除容器
一般删除容器:docker rm CONTAINER_NAME
删除所有停止的容器:docker container prune
将容器做成镜像
提交:docker commit <容器 ID 或容器名> [<仓库名>[:<标签>]]
docker commit containerID/containerName repository:tag
例如:docker commit IMAGE_NAME chinacloud/nginx:v2
导入/导出容器
从本地导入容器:cat docker/CONTAINER_NAME.tar | docker import - test
导出容器到本地:docker export CONTAINER_NAME > 文件夹/CONTAINER_NAME.tar
更新容器启动参数
如增加随着docker启动而启动:docker container update --restart=always
制作镜像并远程发布 REPOSITORY
(参考腾讯云)
编辑Dockerfile 文件
vim Dockerfile
添加如下内容:
FROM chinacloud/nginx:v2 #基础镜像来源。
MAINTAINER DTSTACK #镜像拥有者。
RUN mkdir /dtstact # RUN 后面接容器运行前需要执行的命令,由于 Dockerfile 文件不能超过127行,因此当命令较多时建议写到脚本中执行。
ENTRYPOINT ping https://cloud.tencent.com/ #开机启动命令,此处最后一个命令需要是可在前台持续执行的命令,否则容器后台运行时会因为命令执行完而退出。
构建镜像
docker build -t nginxos:v1 .
注意:点号.是 Dockerfile 文件的路径,不能忽略。
运行容器并查看容器
docker run -d nginxos:v1 #守护进程后台运行容器
docker logs CONTAINER ID/IMAGE #如未查看到刚才运行的容器,则用容器 ID 或者名字查看启动日志排错。
制作镜像
docker commit IMAGE_NAME nginxweb:v2 #commit 参数后添加容器 ID 和构建新镜像的名称和版本号。
docker images #列出本地(已下载的和本地创建的)镜像。
将镜像推送至远程仓库
默认推送到Docker Hub 。
需要先登录 Docker,为镜像绑定标签,将镜像命名为 Docker 用户名/镜像名:标签的格式。
docker login #执行后输入镜像仓库用户名及密码
docker tag [镜像名]:[标签] [用户名]:[标签]
docker push [用户名]:[标签]
切换docker加速镜像
国内的的确很慢,可以尝试切换docker加速镜像,阿里云的自己在容器解决方案那里获取,腾讯云的如下:
使用镜像源(腾讯云为例):
vim /etc/docker/daemon.json
加入如下源:
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
重启docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
docker安装centos8
默认的几个包都是apt-get的我还是习惯centos的yum和ll!
拉取镜像:docker pull centos:centos8
澡堂容器:docker run -it --rm --name centos80 centos:centos8
专门管理mysql或mariadb的容器,检出centos8镜像,然后创建容器命令:docker run -it --name centos80db --link mysql56:mysql56 -v /data/testing:/opt/testing centos:centos8
拓展阅读
阿里云:部署并使用Docker(CentOS 8)
腾讯云:搭建 Docker
centos7安装LD4NMP(docker,nginx,mariadb,php)