1. 环境准备
Linux ubuntu 4.15.0-194-generic #205-Ubuntu SMP Fri Sep 16 19:49:27 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
2. 安装
安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
2.1. 配置镜像加速
Docker镜像首页,包括官方镜像和其它公开镜像。Docker Hub上最受欢迎的10大镜像 (通过Docker registry API获取不了镜像被pull的个数,只能通过镜像的stars数量,来衡量镜像的流行度。毫无疑问,拥有最高stars数量的库都是官方库。国情的原因,国内下载 Docker HUB 官方的相关镜像比较慢,可以使用国内(docker.io)的一些镜像加速 器,镜像保持和官方一致,关键是速度块,推荐使用。配置镜像加速器:
PS:配置镜像加速器(参考该网站具体的文档操作)
- 阿里云(先加入阿里云开发者平台:https://dev.aliyun.com)
- docker中国加速器(https://www.docker-cn.com)
- USTC加速器(https://lug.ustc.edu.cn/wiki/ ) 真正的公共服务(无需任何操作)
- daocloud、网易蜂巢加速器:略
步骤:
sudo vim /etc/docker/daemon.json
配置内容:
{
"registry-mirrors": ["https://cs913o6k.mirror.aliyuncs.com"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
3. 卸载
sudo apt-get remove docker docker-engine docker.io containerd runc
4. 镜像操作
4.1. 列出镜像
docker images
- REPOSITORY:表示镜像的仓库源 TAG:镜像的标签(版本),同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本。
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
4.2. 查找镜像
docker search 镜像名称
- NAME:镜像仓库源的名称
- DESCRIPTION:镜像的描述
- STARS:用户评价,反应一个镜像的受欢迎程度
- OFFICIAL:是否docker官方发布
- AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
4.3. 拉取镜像
docker pull 镜像名称[:version]
4.4. 删除镜像
#1、删除一个镜像
docker rmi 镜像名称/id
#2、删除多个镜像
docker rmi 镜像名称1/id1 镜像名称2/id2 ...
#3、删除所有镜像
docker rmi `docker images -q`
5. 容器操作
5.1. 创建容器
docker run [options] image command [ARG...]
option | 作用 |
---|---|
-i | 以交互模式运行容器,通常与 -t 同时使用 |
-t | 启动容器后,为容器分配一个命令行,通常与 -i 同时使用 |
-v | 目录映射,容器目录挂载到宿主机目录,格式: <host目录>:<容器目录> |
-d | 守护进程,后台运行该容器 |
-p | 指定端口映射,格式:主机(宿主)端口:容器端口 |
-P | 随机端口映射,容器内部端口随机映射到主机的端口(49153起始 49153到65535) |
-u | 以什么用户身份创建容器 |
-name | “nginx-lb” 容器名字 |
-m, --memory bytes | 设置容器使用内存最大值 |
-h, --hostname string | 指定容器的 host name |
-dns 8.8.8.8 | 指定容器 dns 服务器 |
-e username=“ritchie” | 设置环境变量 |
--restart=always | 重启后,容器是否自动重启 |
-privileged | 容器内是否使用真正的 root 权限 |
--link | 容器内是否使用真正的 root 权限 |
创建数据库:
docker run -d --name=dev_template_factory_data --restart=always \
-v /data/dev_template_factory_data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=qwer123456 \
-p 127.0.0.1:8091:5432 \
-d postgres:14
创建应用:
docker run -d --name=template-factory-test --restart=always \
-p 8090:8080 \
-v /usr/share/zoneinfo:/usr/share/zoneinfo:ro \
-v /etc/ssl/certs:/etc/ssl/certs:ro \
-v /data/dev-template-factory/data:/data \
-v /data/dev-template-factory/log:/log \
-v /data/dev-template-factory/session:/session \
-v /data/dev-template-factory/static:/static \
-e TZ=Asia/Shanghai \
-e LOG_LEVEL=0 \
-e db="postgres://postgres:qwer123456@dev_template_factory_data:5432/template-factory?sslmode=disable" \
-e s=":8080" \
--link dev_template_factory_data:dev_template_factory_data \
registry.cn-chengdu.aliyuncs.com/hountryliu/template-factory-test
5.2. 进入容器
#方式一: (ps:exit,退出容器会停止)
docker attach 容器名称/id
#eg:docker attach u3
#方式二: (ps:exit,退出容器不会停止)
docker exec -it 容器名称/id /bin/bash
#eg:docker exec -it u3 /bin/bash
5.3. 查看容器
#查看正在运行的容器
docker ps
#查看运行过的容器(历史)
docker ps -a
#最后一次运行的容器
docker ps -l
5.4. 停止/启动容器
docker start 容器名称/id
docker stop 容器名称/id
5.5. 获取容器/镜像的元数据
查看容器/镜像全部信息:
docker inspect 容器/镜像
查看容器/镜像部分信息:
docker inspect --format '{{.NetworkSettings.IPAddress}}' 容器/镜像
5.6. 删除容器
PS:无法删除正在运行的容器
#删除一个容器:
docker rm 容器名称/id
#删除多个容器:
docker rm 容器名称1/id1 容器名称2/id2 ...
#删除所有容器
docker rm `docker ps -a -q`
5.7. 查看容器日志
docker logs 容器名称/id
5.8 文件拷贝
如果我们需要将文件拷贝到容器内可以使用cp命令
docker cp 需要拷贝的文件或目录 容器名称:容器目录
#eg:docker cp 1.txt c2:/root
也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录
#eg:docker cp c2:/root/2.txt /root
6. docker自定义镜像
6.1. docker commit
6.1.1. 制作
提交一个正在运行的容器为一个新的镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
-a
:提交的镜像作者-c
:使用Dockerfile指令来创建镜像-m
:提交时的说明文字;-p
:在commit时,将容器暂停。
6.1.2. 打包
6.1.2.1. 打包镜像
docker save [OPTIONS] IMAGE [IMAGE...]
OPTIONS 说明:
-o
:输出到的文件。
6.1.2.1. 打包容器
docker export [OPTIONS] CONTAINER
OPTIONS说明:
-o
:将输入内容写到文件。
6.1.3. 导入
6.1.3.1. 导入镜像
docker load [OPTIONS]
OPTIONS 说明:
--input , -i
: 指定导入的文件,代替 STDIN。--quiet , -q
: 精简输出信息。
6.1.3.2. 导入容器
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
OPTIONS说明:
-c
:应用docker 指令创建镜像-m
:提交时的说明文字
6.2. docker builder
6.2.1. Dockerfile
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像的作者 邮箱+姓名
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤:tomcat镜像,这个tomcat压缩包,添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOST # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令。
COPY # 类似ADD ,将我们的文件拷贝到镜像中
ENV # 构建的时候设置环境变量
eg:构造nginx镜像的Dockerfile
#下载镜像
FROM centos:centos7
MAINTAINER hountryliu hountryliu@qq.com
#安装nginx所需环境
RUN yum install -y pcre pcre-devel openssl openssl-devel gcc gcc+ wget vim net-tools
#创建www用户组
RUN useradd www -M -s /sbin/nologin
RUN cd /usr/local/src && wget http://nginx.org/download/nginx-1.23.3.tar.gz && tar -zxvf nginx-1.23.3.tar.gz
#手动编译安装nginx
RUN cd /usr/local/src/nginx-1.23.3 && ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module && make && make install
ENTRYPOINT /usr/local/nginx/sbin/nginx && tail -f /usr/local/nginx/logs/access.log
6.2.2. 构建镜像
docker build -t ImageName:TagName dir
选项
-t
给镜像加一个TagImageName
给镜像起的名称TagName
给镜像的Tag名Dir
Dockerfile所在目录
6.2.2.1 测试镜像
docker run -itd --name=test_nginx -p 39009:80 my_nginx:v1 /bin/bash