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-构建时执行的命令

  1. RUN yum install -y vim #Shell 命令格式
  2. RUN ["yum", "install", "-y", "vim"] #Exec命令格式

2)ENTRYPOINT-容器启动时执行的命令

  1. 用于在容器启动时执行命令

  2. 只有最后一个ENTRYPOINT会被执行

  3. 推荐使用Exec格式

    ENTRYPOINT ["ps"]
    

3)CMD-容器启动后执行默认的命令或参数

  1. 用于设置默认执行的命令

  2. 只有最后一个CMD会被执行

  3. 容器启动时附加指令,则CMD被忽略!!!

  4. 推荐使用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的主要内容,如果未能解决你的问题,请参考以下文章

markdown docker-compose片段

sh Docker片段

《Docker 源码分析》全球首发啦!

docker 部署 coredns(内部域名解析)

docker 部署 coredns(内部域名解析)

将 Docker 容器限制为单个 cpu 核心