Docker 基础学习
基础命令 docker desktop 中可以直接运行该软件就好了
# 启动docker sudo service docker start # 重启docker sudo service docker restart # 停止docker sudo service docker stop
-
镜像
docker image ls # 已经存在的镜像 # 或者 docker images
-
拉取镜像
# 官方镜像 docker image pull 镜像名称 # 注意版本号,如果没有版本号默认会拉取 lastest,可能报错,所以在镜像网站搜索的时候查看对应的版本 # 或简写为 docker pull 镜像名称 # 比如 docker pull ubuntu docker pull ubuntu:16.04 # 个人镜像 docker pull 仓库名称/镜像名称 docker pull xunmi/django # 第三方仓库拉去 docker pull 第三方仓库地址/仓库名称/镜像名称 docker pull hub.c.163.com/library/mysql:latest (默认仓库名为library,所有从官方获取镜像相当于`sudo docker image pull library/镜像名称`)
-
删除镜像 docker desktop中可以通过按钮直接删除
docker image rm 镜像名或镜像ID 或 docker rmi 镜像名或镜像ID docker image rm hello-world docker rmi 9e64176cd8a2
-
-
容器 docker desktop中可以通过按钮完成创建容器
docker run [可选参数] 镜像名 [向启动容器中传入的命令]
-
参数
-p
指定宿主机与容器内的端口映射-p 3306:3306
前面是宿主机,后面是容器-d
后台运行--name
指定容器名称-v
把宿主机的目录挂载到容器中-p /home/mslsy/data /data
把宿主机的/home/mslsy/data
路径挂载到容器内/data
路径;如果是宿主机的绝对路径:将宿主机的路径与容器内的路径同步,可以理解为同一个路径,宿主集中修改,容器内立刻发生变化;-i
控制台交互,通常与-t
一期使用-t
支持终端登录,分配一个伪终端 ,通常与-i
一期使用-e
设置容器内的环境变量--link
添加容器链接--link mysql:m
m是mysql容器的名称,也是当前容器访问mysql容器的域名--network
指定容器的网络--network=
使用docker创建网络docker network create -d bridge my-net
使用内置bridge
网络驱动程序创建网络
-
查看容器
# 查看当前所有正在运行的容器 docker ps # 查看当前所有的容器 docker ps -a # 使用过滤器(除了name外,常用的还可以指定id:id= 、所有停止的容器:status=exited,正在运行的容器:status=running 等) docker ps -f name=指定的名字 # 显示2个上次创建的容器(2可以改变) docker ps -n 2 # 显示最新创建的容器(包括所有状态) docker ps -l # 仅显示ip docker ps -q # 显示容器大小 docker ps -s
-
启动和关闭容器 docker desktop中可以通过按钮进行
# 停止容器 docker container stop 容器名或容器id # 或可简写为 docker stop 容器名或容器id # 强制关闭容器 docker container kill 容器名或容器id # 或可简写为 docker kill 容器名或容器id # 启动容器 docker container start 容器名或容器id # 或可简写为 docker start 容器名或容器id
-
终端交互模式进入容器
docker exec -it 容器名称或ID 进入的目录
-
删除容器
docker rm -f 容器ID docker container prune # 清理掉所有终止的容器
-
-
Dockerfile
- Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
- 全部指令都是大写
# FROM 基础镜像源 必须是第一个 FROM nginx:latest # MAINTAINER 维护者信息 MAINTAINER weihuzhexinxi # RUN 构建镜像时执行的命令 RUN ["cd","/data"] RUN cd /data # ADD 复制宿主机的文件到容器 如果是压缩文件会加压,网络压缩文件除外 ADD test /test # COPY 与ADD作用相同,但是只限于本地的文件,压缩文件不会解压 COPY AAA /aaa # CMD 构建容器后调用的指令 及docker run创建容器之后执行的,同时docker run 后面的指令会覆盖CMD CMD ["/usr/bin/wc","--help"] CMD echo "test" # ENTRYPOINT 一个dockerfile中只有一个有效,当有多个时取最后一个,不会被docker run 后面的指令覆盖,当不是完整的指令时,会通过CMD传参 ENTRYPOINT ["top", "-b"] CMD ["-c"] # LABEL 为镜像添加元信息 LABEL version="1.0" description="这是一个Web服务器" by="IT笔录" # ENV 设置环境变量 ENV myname TEST ENV myage=20 # VOLUME:用于指定持久化目录 # WORKDIR:工作目录,类似于cd命令 后面所有的RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行 WORKDIR /data #EXPOSE 映射端口 EXPOSE 80 #USER 指定运行容器是的用户明或者UID
-
构建镜像
- Dockerfile必须在项目目录下
docker build -t 容器名称:tag .
-
容器之间的网络通信
-
--link
# docker run --name mysql_1 -e MYSQL_ROOT_PASSWORD=password -d batnami/mysql:5.7.36 # docker run --name nginx_e --link mysql_1:mysql -d nginx:lastest
-
共同的网络
docker network create -d bridge my-net docker run --name mysql_1 -e MYSQL_ROOT_PASSWORD=password --network=my-net -d batnami/mysql:5.7.36 docker run --name nginx_e --network=my-net -d nginx:lastest
-
-
Docker Compose
-
Compose 是用于定义和运行多容器 Docker 应用程序的工具。
-
docker-compose.yml 文件配置
version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis volumes: logvolume01: {}
-
docker-compose up
运行整个应用 -
docker-compose 运行的容器之间是可以正常通信的
-
-
几个常用的容器
mysql
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7.36
minio
docker run -p 9000:9000 --name minio_wsx -v D:\Docker\data\minio\data:/data -v D:\Docker\data\minio\config:/root/.minio minio/minio:13487-5f20027 server /data
redis
docker run -p 6379:6379 --name redis -e ALLOW_EMPTY_PASSWORD -d batnami/redis:6.0
Dockerfile 示例文件
# Base images 基础镜像
FROM ubuntu:16.0.4
#MAINTAINER 维护者信息
MAINTAINER mslsy
#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#ADD 文件放在当前目录下,拷过去会自动解压
ADD nginx-1.8.0.tar.gz /usr/local/
ADD epel-release-latest-7.noarch.rpm /usr/local/
#RUN 执行以下命令
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www
#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo "daemon off;" >> /etc/nginx.conf
#EXPOSE 映射端口
EXPOSE 80
#CMD 运行以下命令
CMD ["nginx"]