一、基础操作
1.1 安装
- UOS安装docker
apt install -y docker.io
- 服务管理
systemctl status docker
systemctl enable docker
systemctl disable docker
systemctl start docker
systemctl stop docker
- 测试
docker run hello-world
1.2 Docker的*仓库
1.Docker官方的*仓库:这个仓库是镜像最全的,但是下载速度较慢。
2.国内的镜像网站:网易蜂巢,daoCloud等,下载速度快,但是镜像相对不全。
https://c.163yun.com/hub#/home
http://hub.daocloud.io/ (推荐使用)
1.3 镜像加速
需要创建 /etc/docker/daemon.json,并添加如下内容
{
"registry-mirrors":["https://registry.docker-cn.com"],
}
#重启两个服务
systemctl restart docker
docker info
二、镜像操作
- 搜索镜像
docker search nginx
- 下载镜像
# 从官方下载镜像
docker pull tomcat
# 从第三方源下载镜像
docker pull daocloud.io/library/tomcat:8.5.15-jre8
- 查看已经下载安装过的镜像
docker images
- 删除镜像
docker rmi 镜像ID
# 例如
docker rmi b8dfe9ade316
- 镜像导出
docker save -o 导出生成的镜像文件名称 需要导出的镜像ID
# 例如
docker save -o tomcat.img b8d
- 镜像导入
docker load -i 镜像文件名
# 例如
docker load -i tomcat.img
- 修改镜像名称及版本
docker tag 镜像ID 名称:版本
# 例如
docker tag b8 tomcat:8.5
三、容器操作
- 创建并运行容器
docker run -d -p -it 系统映射端口:容器端口 --name 定义容器名称 镜像ID|镜像名称:版本
# 例如
docker run -d -p 80:8080 -it --name tomcat b8df
需要注意docker run是用来创建容器的,只不过会在创建后启动容器,当容器创建后,以后再启动容器就不用要run了。
-i:启用交互式
-t:启用tty
-d:后台运行
-p:指定端口映射
-e:给容器环境变量传值
--link:关联容器
--restart=always :设置自启动,当docker服务启动后自动运行容器
# 将宿主机所有网卡的一个随机端口映射到容器的80端口
-p 80
# 将主机的某一个网卡的随机端口映射到容器的80端口,ip:后面为空代表此IP的任意端口
-p 192.168.149.140::80
# 将所有网卡的指定端口映射到容器的80端口
-p 8080:80
可以用个docker port 容器id来查看端口映射
或者通过iptables -L -n -t nat 来查看生成的iptables规则
--name:设置容器名称
- 查看容器
# 查看正在运行的容器
docker ps
# 查看所有容器,包括未运行的
docker ps -a
# 仅查看所有容器ID
docker ps -qa
- 删除容器
# 删除单个容器
docker rm 容器ID
# 删除所有容器
docker rm `docker ps -qa`
- 启动/停止容器
docker start 容器名称|容器ID
docker stop 容器名称|容器ID
docker restart 容器名称|容器ID
- 进入容器
docker exec -it 容器ID|容器名称 bash
- 查看容器日志
docker logs -f 容器ID|容器名称
- 查看容器详细信息
docker inspect e4
四、Docker网络
- none
- bridage
- container share
- host
五、Docker数据卷
docker容器默认使用的卷有以下缺点
-
容器删除后,会将卷及卷内的数据一并删除,数据不能持久化存储。
-
容器一旦有问题,不能进行数据迁移
-
宿主机需要进入到容器内才能操作容器数据
数据卷优点 -
可以将宿主机本地的一个目录映射到容器的某个目录
-
维护容器的配置及数据时,可以直接在宿主机维护
-
数据可以持久化存储
-
可以将数据卷映射到速度快的磁盘上,提升容器性能
-
多个容器可以共享一个数据卷
配置方法:只需在run的时候加上-v选项即可
如果目录不存在,会自动创建目录,无需手动创建。
# 将宿主机的/data目录映射到容器的/data目录
docker run -d -p 80:8080 -it -v /data:/data --name web1 b8df
# 如果不指定宿主机目录,将会映射到docker默认的目录下
docker run -d -p 80:8080 -it -v /data --name web2 b8df
# 查看映射的位置,默认在/var/lib/docker/volumes下
docker inspect web2
六、Dockerfile
- 第一行非注释行必须是FROM指令
- 指定不区分大小写,惯例大写
- 打包镜像所引用的文件必须跟Dockerfile文件在同级目录或子目录
指令
-
FROM
指定需要制作镜像的基本镜像,后续指令都是基于此镜像操作。
如:FROM nginx
-
MAINTANIER
指定作者的详细信息
如:MAINTANIER "zhangsan zhangsan@qq.com"
-
COPY
从宿主机复制文件到镜像内
如:COPY image /data/test
-
ADD
同COPY,但可以支持URL下载及tar包解压
如:ADD image.tar.gz /usr/local/image/
ADD http://xxx.xxx.xxx/xxx.tar.gz /usr/local/image/
-
WORKDIR
改变当前所在目录,相当于cd命令,仅影响WORKDIR之后的指令
如:WORKDIR /usr/local/
-
VOLUME
指定存储卷,采用docker方式映射,既宿主机映射目录为docker自动生成的目录。
如:VOLUME /data/mysql
-
EXPOSE
指定容器运行后所监听的默认端口,可以监听多个端口。
如:EXPOSE 22
EXPOSE 80/tcp 53/udp
-
ENV
定义容器环境变量。
如:ENV DOC_ROOT=/var/www/html/
定义多个变量
ENV NAME=tanqing \
AGE=24 \
SEX=boy
-
RUN
构建镜像时运行的shell命令。
如:RUN apt install -y openssh-server \
mkdir /var/run/sshd
- CMD
运行容器后,如果docker run的时候没有指定执行的命令,那么默认会执行次该指令定义的命令。
-
ENTRYPOINT
和CMD类似,区别在于,如果docker run的时候指定了执行的命令,那么也也不会执行该命令,而是会执行ENTRYPOINT定义的命令,并把docker run的命令当参数传递给ENRTYPOINT定义的命令。