Docker
Posted jingjiu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker相关的知识,希望对你有一定的参考价值。
typora-copy-images-to: zccmd_images
typora-root-url: zccmd_images
入门
更换阿里巴巴镜像
在系统右下角托盘图标内右键菜单选择 Settings,打开配置窗口后左侧导航菜单选择 Docker Daemon。编辑窗口内的JSON串,填写下方加速器地址:
{
"registry-mirrors": ["https://4r9yehe8.mirror.aliyuncs.com"]
}
编辑完成后点击 Apply 保存按钮,等待Docker重启并应用配置的镜像加速器。
下载镜像
docker pull nginx:1.16.1
删除镜像
docker rmi nginx:latest
启动镜像
docker run --name myweb -d -p 8088:80 nginx:1.16.1
docker run --name zcc_mysql_5.7.28 -e MYSQL_ROOT_PASSWORD=password -d -p 3306:3306 mysql:5.7.28
启动/停止已有容器
docker start ed873662ff3c
docker stop ed873662ff3c
docker restart ed873662ff3c #重新启动
查看容器
docker ps #正在运行
docker ps -a #所有容器
查看镜像历史操作
docker history ed13ba4c9071
*删除所有容器
docker rm $(docker ps -aq)
docker system prune
创建自定义容器
1)进入容器
docker exec -it e85f2d01f991 /bin/bash
2)编辑Dockerfile文件
# FROM -设置基准镜像
FROM tomcat:latest
# WORKDIR -设置工作目录-相当于cd /usr/local/tomcat/webapps
WORKDIR /usr/local/tomcat/webapps
# ADD(或者COPY) -用于复制本地文件 到 镜像中
ADD docker-web ./docker-web
# ENV -设置环境常量 以下为设置JAVA_HOME为jdk8的路径
#1. ENV JAVA_HOME /usr/local/openjdk8
#2. RUN ${JAVA_HOME}/bin/java -jar test.jar
# EXPOSE -暴露容器端口
#1. EXPOSE 8080
#2. EXPOSE 3306
3)新建自定义容器
docker build -t zcc/mydocker-web:1.0 C:UsersIvoryDesktopdocker-web
4)运行自定义容器
docker run -p 8001:8080 zcc/mydocker-web:1.0
Dockerfile运行三种指令
1)RUN-构建时执行的命令
- RUN yum install -y vim #Shell 命令格式
- RUN ["yum", "install", "-y", "vim"] #Exec命令格式
2)ENTRYPOINT-容器启动时执行的命令
用于在容器启动时执行命令
只有最后一个ENTRYPOINT会被执行
推荐使用Exec格式
ENTRYPOINT ["ps"]
3)CMD-容器启动后执行默认的命令或参数
用于设置默认执行的命令
只有最后一个CMD会被执行
容器启动时附加指令,则CMD被忽略!!!
推荐使用Exec格式
CMD ["ps", "-ef"]
示例:"-ef"可以被"-aux"替代,比如docker run shell -aux
FROM centos
RUN echo "image building!!"
ENTRYPOINT ["ps"]
CMD ["-ef"]
发布
1)构建镜像
docker build -t jingjiu/myhello:1.0 C:UsersIvoryDesktopmyhello
2)登录
docker login
3)推送
docker push jingjiu/myhello:1.0
Redis
1)Dockerfile文件
FROM centos
RUN yum install -y gcc gcc-c++ net-tools make
WORKDIR /usr/local
ADD redis-5.0.7.tar.gz .
WORKDIR /usr/local/redis-5.0.7/src
RUN make && make install
WORKDIR /usr/local/redis-5.0.7/
ADD redis-7000.conf .
EXPOSE 7000
CMD ["redis-server", "redis-7000.conf"]
//redis-7000.conf文件内容
port 7000
bind 0.0.0.0
2)创建镜像
docker build -t jingjiu/myredis:5.0.7 C:UsersIvoryDesktop
edis
3)运行
docker run -p 7006:7000 -d jingjiu/myredis:5.0.7
容器的单向通信
1)创建两个容器
docker run --name mydb centos sleep 1d //172.17.0.3
# docker run --name myweb -d centos sleep 1d //只能通过IP通信
docker run --name myweb --link mydb -d centos sleep 1d //可以通过myweb通信
2)查看容器信息(IP)
docker inspect 812c36b612d2
容器的双向通信
1)查看docker的网卡信息
docker network ls
2)创建新网桥
docker network create -d bridge zcc-brige
3)将容器实例加入新网桥
# 创建两个新容器,名为c1、c2
docker run --name c1 -d centos sleep 1d
docker run --name c2 -d centos sleep 1d
# 分别加入新网桥
docker network connect zcc-brige c1
docker network connect zcc-brige c2
Volume数据共享
方式一:
docker run --name tomcat1 -v C:UsersIvoryDesktopwebapps:/usr/local/tomcat/webapps tomcat
方式二:
# 创建单纯的挂载容器
docker create --name webpage -v C:UsersIvoryDesktopwebapps:/usr/local/tomcat/webapps tomcat /bin/true
# 创建容器1、2、3
docker run -p 8001:8080 --volumes-from webpage --name tomcat1 -d tomcat
docker run -p 8002:8080 --volumes-from webpage --name tomcat2 -d tomcat
docker run -p 8003:8080 --volumes-from webpage --name tomcat3 -d tomcat
# 这三个都共享了同一份文件C:UsersIvoryDesktopwebapps里的文件
方式三(自动挂载,Linux):
# 在Dockerfile中指定
FROM tomcat
VOLUME "/usr/local/tomcat/webapps"
docker-compose
部署一个word
1)创建docker-compose.yml文件
version: '3.3'
services:
db:
image: mysql:5.7 # docker run mysql:5.7
volumes:
- db_data:/var/lib/mysql # -v empty:/var/lib/mysql
restart: always # 自动重启
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db # docker --link db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
2)进入当前目录安装
docker-compose up -d
3)进入当前目录卸载
docker-compose down --volumes
以上是关于Docker的主要内容,如果未能解决你的问题,请参考以下文章