最全!docker全部知识+命令

Docker

1. Docker安装与启动

1.1 安装Docker

Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的。

(1)yum包更新到最新

sudo yum update

(2)安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

sudo yum install -y yum-utils device-mapper-persistent-data  lvm2

(3)设置yum域为阿里云

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

(4)安装docker

sudo yum install docker-ce

(5)安装后查看docker版本

docker  -v

1.2 设置ustc镜像

ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。

https://lug.ustc.edu.cn/wiki/mirrors/help/docker

编辑该文件:

vi /etc/docker/daemon.json

在文件中输入如下内容:

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

1.3 Docker的启动与停止

//启动docker  service可加可不加
systemctl start docker.service
//停止docker
systemctl stop docker.service
//重启docker
systemctl restart docker.service
service docker restart
//查看docker状态
systemctl status docker.service
//开机启动
systemctl enable docker 
// 查看docker概要信息
docker info

2. Docker常用命令

2.1 镜像相关命令

2.1.1 docker下载镜像
docker pull mysql:5.7.23
2.1.2 docker查看下载的镜像
docker images

docker images [options] [REPOSITORY[:TAG]]

options是选项,后面是指定镜像的名称.这个用的不多,可能当本地镜像非常多的时候要指定查看某一个镜像.
2.1.3 docker查看启动的进程
docker ps -a
2.1.4 docker运行命令
docker run -di --name=tensquare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql(或者镜像ID)

docker run 启动参数 镜像id/镜像名称+Tag

-i让容器的标准输入保持打开

-d :代表后台运行容器
–name: 自定义容器的名称,不加这命令docker会随便给一个名给你,所以建议打上这命令
-p :代表映射的端口 本地端口:镜像的默认端口(注意,每个软件默认端口是不同的)
-e: 配置mysql的root密码
2.1.5 将docker端口映射到服务器端口

端口映射只需要在运行时加入指令 -p 映射的宿主机端口:容器运行端口
如下,把容器运行的8080端口映射到宿主机的8099端口:
名称设置为my_tomcat_1

docker run -d -p 8099:8080  --name my_tomcat_2 tomcat:8.5
2.1.6 docker检索镜像
docker search 镜像名字
2.1.7 删除镜像

停止所有的container

docker stop $(docker ps -a -q)

删除

docker rmi  <image id>

删除所有镜像

docker rmi $(docker images -q)

删除untagged images,也就是那些id为的image的话可以用

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
2.1.8 创建虚拟网卡
docker create network redis-net
docker network ls ##查看网卡信息
备注:创建redis-net虚拟网卡 目的是让docker容器能与宿主(centos7)桥接网络 并间接与外界连接
2.1.9 设置镜像标签(重命名)
docker tag cluster-redis cluster-redis:5.0.4
2.1.10 查看镜像
  • 查看镜像历史信息

    docker history [镜像名称]:tag

  • 查看镜像详细信息

    docker inspect [镜像名称]:tag

2.2 容器相关命令

2.2.1 进入运行中的容器
docker exec -it [容器id] /bin/bash
2.2.2 docker终止/启动/重启容器
docker stop 容器id

docker start 容器id

docker restart 容器id
2.2.3 文件拷贝

如果我们需要将文件拷贝到容器内可以使用cp命令

docker cp 需要拷贝的文件或者目录  容器名称:容器目录

也可以将文件从容器中拷贝出来

docker cp 容器名称:容器目录 需要拷贝的文件或目录
2.2.4 目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录

的文件从而去影响容器。

创建容器 添加-v参数 后边为 宿主机目录:容器目录,例如

docker run -di -v /use/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7

如果你共享的是多级的目录,可能会出现权限不足的提示。

这是因为CentOS7中的安全模块selinux吧权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没

有权限的问题

2.2.5 查看容器ip地址

我们可以通过以下命令查看容器运行的各种数据

docker inspect 容器名称(容器id)

也可以直接执行下面的命令直接输出ip地址

docker inspect --format '{{.NetworkSettings.IPAddress}}' 容器名称(容器id)
2.2.6 删除容器

由于docker容器是很轻量级的东西,所以我们可以在容器关闭之后直接通过执行"sudo docker rm 容器id"将容器删除!

 docker rm 容器id

2.2.7 查看容器日志
docker logs -f -t --since="2017-05-31" --tail=10 tomcat

--since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志。

-f : 查看实时日志

-t : 查看日志产生的日期

-tail=10 : 查看最后的10条日志。

tomcat: 容器名称

查看最近30分钟的日志:

docker logs --since 30m CONTAINER_ID

2.2.8 容器创建
  • 作用

    利用镜像创建出一个Created状态的待启动容器

  • 命令格式

​ docker create [OPTIONS] IMAGE [COMMAND] [ARG…]

  • 命令参数(options)

    -t, --tty(所有-- 都为 - - )分配一个伪TTY,也就是分配虚拟终端
    -i,–interactive即使没有连接,也要保持STDIN打开
    –name为容器起名,如果没有指定将会随机产生一个名称
  • 命令参数(COMMAND\ARG):

    COMMAND表示容器启动后,需要在容器中执行的命令,如ps、ls等命令
    ARG**表示执行COMMAND **时需要提供的一些参数,如ps命令的 aux、ls命令的-a等等
2.2.9 容器提交
  • 作用

    根据容器生成一个新的镜像

  • 命令格式

​ docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

  • 命令参数(options)

    -a, --author string作者
    -c, --change list为创建的镜像加入Dockerfile 命令
    -m, --message string提交信息,类似gitcommit -m
    -p, --pause**提交时暂停容器 ** (default true)
2.2.10 容器导出
  • 作用

    将容器当前的文件系统导出成一个tar 文件

  • 命令格式

​ docker export [OPTIONS] CONTAINER

  • 命令参数(options)

    -o, --output string指定写入的文件,默认是STDOUT
2.2.11 容器打包的导入
  • 作用

    从一个tar文件中导入内容创建一个镜像

  • 命令格式

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

  • 命令参数(options)

    -c, --change list为创建的镜像加入Dockerfile命令
    -m, --message string导入时,添加提交信息

3. 应用部署

3.1 MySql部署

(1) 拉去MySQL镜像

docker pull centos/mysql-57-centos7

(2) 创建容器

docker run -di --name=docker_mysql  -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

-i让容器的标准输入保持打开

-d :代表后台运行容器
–name: 自定义容器的名称,不加这命令docker会随便给一个名给你,所以建议打上这命令
-p :代表映射的端口 本地端口:镜像的默认端口(注意,每个软件默认端口是不同的)
-e: 配置mysql的root密码

(3) 进去MySQL容器

docker exec -it docker_mysql /bin/bash

(4) 登录mysql

mysql -u root -p

3.2 Tomcat部署

(1) 拉取镜像

docker pull tomcat:7-jre7

(2) 创建容器

创建容器 -p表示地址映射

docker run -di --name=tomcat -p 8070:8080 -v /usr/local/webapps:/usr/local/tamcat/webapps tomcat:7-jre7

3.3 Nginx部署

(1) 拉取镜像

docker pull nginx

(2) 创建Nginx容器

docker run -di --name=mynginx -p 80:80 nginx

3.4 Redis部署

(1) 拉取镜像

docker pull redis

(2) 创建单节点容器

docker run -di --name=myredis -p 6379:6379 redis

docker create --name redis-node01 --net host -v redis-node01:/data redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-01.conf
--port 6379

(3)构建redis集群

docker create --name redis-node01 --net host -v redis-node01:/data redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-01.conf  --port 6379 --requirepass "50f25300f5" --cluster-announce-ip 59.110.222.58
docker create --name redis-node02 --net host -v redis-node02:/data redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-02.conf  --port 6380 --requirepass "50f25300f5" --cluster-announce-ip 59.110.222.58
... 一般为6个

docker start  redis-node01  redis-node02 ...
// 进入容器
docker exec -it redis-node01  /bin/bash
// 创建集群
redis-cli --cluster create 59.110.222.58:6379 59.110.222.58:6380 59.110.222.58:6381 --cluster-replicas 0 -a 50f25300f5
// 监测
redis-cli
cluster nodes

参考:https://www.kanzhun.com/jiaocheng/175098.html

redis集群安装:

https://www.cnblogs.com/cxbhakim/p/9151720.html

3.5 mongodb部署

  • 1、拉取镜像

    docker pull mongo
    
  • 2、启动镜像

    docker create --name mongo --restart=always -p 27017:27017  -v /usr/local/docker/mongodb/db/:/data/db mongo 
    
    
  • 3、设置用户

    docker exec -it 4 /bin/bash
    
    mongo
    
    use admin
    
    db.createUser({user:'root',pwd:'root123',roles:['userAdminAnyDatabase']})
    
    db.auth('root','root123')
    
    use test
    
    db.createUser({user:'root',pwd:'root123',roles:['readWrite']})
    
    #更新源 
    apt-get update 
    # 安装 
    apt-get install vim 
    # 修改 mongo 配置文件 
    vim /etc/mongod.conf.orig
    
    

3.6 RocketMQ

#部署RocketMQ
#拉取镜像
docker pull foxiswho/rocketmq:server-4.3.2
docker pull foxiswho/rocketmq:broker-4.3.2

#创建nameserver容器
docker create -p 9876:9876 --name rmqserver \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-e "JAVA_OPTS=-Duser.home=/opt" \
-v rmqserver-logs:/opt/logs \
-v rmqserver-store:/opt/store \
foxiswho/rocketmq:server-4.3.2

#创建broker.conf文件
vim /usr/local/docker/rocketmq/rmqbroker/conf/broker.conf
brokerIP1=59.110.222.58
namesrvAddr=59.110.222.58:9876
brokerName=broker_tanhua

#创建broker容器
docker create -p 10911:10911 -p 10909:10909 --name rmqbroker \
-e "JAVA_OPTS=-Duser.home=/opt" \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-v /usr/local/docker/rocketmq/rmqbroker/conf/broker.conf:/etc/rocketmq/broker.conf \
-v rmqbroker-logs:/opt/logs \
-v rmqbroker-store:/opt/store \
foxiswho/rocketmq:broker-4.3.2

#启动容器
docker start rmqserver rmqbroker
#停止删除容器
docker stop rmqbroker rmqserver
docker rm rmqbroker rmqserver
#部署RocketMQ的管理工具
docker pull styletang/rocketmq-console-ng:1.0.0
#创建并启动容器
docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=59.110.222.58:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8004:8080 -t styletang/rocketmq-console-ng:1.0.0

4. 迁移与备份

4.1 容器保存为镜像

我们可以通过以下命令将容器保存为镜像

docker commit  mynginx mynginx_i

4.2 镜像备份

我们可以通过以下命令将镜像保存为tar文件

docker save -o mynginx.tar  mynginx_i

4.3 镜像恢复与迁移

首先我们先删除掉mynginx_img镜像,然后执行此命令进行恢复

docker load -i  mynginx.tar

-i 输入的文件

执行后再次查看镜像,可以看到镜像已经恢复


5. Dockerfile

5.1 什么是Dockerfile

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

1、对于开发人员,可以为开发团队提供一个完全一致的开发环境;

2、对于测试人员,可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;

3、对于运维人员,在部署时,可以实现应用的无缝移植。

5.2 常用命令


命令作用
FROM image_name:tag定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name声明镜像的创建者,将被遗弃,使用LABER代替
RUN构建镜像过程中需要执行的命令,是Dockerfile的核心部分(可以写多个)
CMD添加启动容器时需要执行的命令。多条只有最后一条生效。可以在启动容器时被覆盖和修改
ENTRYPOINT同CMD,但这个一定会被执行,不会被覆盖修改
LABLE为镜像添加对应的数据
EXPOSE设置对外暴露的端口
ENV key value设置执行命令时的环境变量,并且在构建完成后,仍然生效(可以写多个)
ARG设置只在构建过程中使用的环境变量,构建完成后,将消失
ADD source_dir/file dest_dir/file将本地文件或目录拷贝到镜像的文件系统中。能解压特定格式文件,能将URL作为要拷贝的文件
COPY source_dir/file dest_dir/file和ADD相似,将本地文件或目录拷贝到镜像的文件系统中。但是如果有压缩文件并不能解压
VOLUME添加数据卷
USER指定以哪个用户的名义执行RUN, CMD 和ENTRYPOINT等命令
WORKDIR path_dir设置工作目录
ONBUILD如果制作的镜像被另一个Dockerfile使用,将在那里被执行Docekrfile命令
STOPSIGNAL设置容器退出时发出的关闭信号。
HEALTHCHECK设置容器状态检查
SHELL更改执行shell命令的程序。Linux的默认shell是[“/bin/sh”,“-c”],Windows的是[“cmd”,“/S”, “/C”]。

官方文档

5.3 使用脚本构建镜像

(1)创建目录

mkdir -p /usr/local/dockerjdk8

(2)下载jdk-8u171-linuz-x64.tar并上传到服务器(虚拟机)中的/usr/local/dockerjdk8目录

(3)创建文件Dockerfile vi Dockerfile

#依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER SONGMM
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u171-linux-x64.tar.gz  /usr/local/java

#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0.171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt,jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME?lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

构建镜像

docker build -t='jdk-1.8' 
// 在当前目录
docker build . -t test-images
docker build /root/dockerfile-dir -t test-image:v1.0
docker build . -f  dockerfile-dir/test-df -t test-image:v1.0


docker build [OPTIONS] PATH | URL | -
-f 指定Dockerfile的路径(这是可以使用其他名称命名Dockerfile)      test-df为dockerfile
-t 确定镜像的名称和tag

6.Docker私有仓库

6.1 拉取私有仓库

( 1 ) 拉取私有仓库库镜像

docker pull registry

(2)启动私有仓库容器

docker run -d -ti --restart always --name=my-registry  -p 5000:5000 -v /my-registry/registry:/var/lib/registry registry

--restart always 代表跟随docker重启而重启

(3)打开浏览器 输入网址http://ip:5000/v2/catalog看到{“repositories”:[ ]}表示私有仓库搭建成功并且内容为空

(4)修改daemon.json

vi /etc/docker/daemon.json

添加以下内容,保存退出。

{"insecure-registries":["ip:5000"]}

此步用于让docker信任私有仓库地址

(5)重启docker服务

systemctl restart docker

6.2 镜像上传至私有仓库

  • 第一步:利用docker tag重命名需要上传的镜像

    docker tag IMAGE 服务器IP:端口/IMAGE_NAME

  • 第二步:利用docker push上传刚刚重命名的镜像

    docker push 服务器IP:端口/centos

注意:

必须重命名为服务器IP:端口/IMAGE_NAME

如果push出现了类似https的错误那么需要往配置文件/etc/docker/daemon.json里添加:”insecure-registries”:[“服务器IP:端口”]

然后重启docker。

(1)标记此镜像为私有仓库的镜像

docker tag jdk1.8  117.78.10.191:5000/jdk1.8

(2)上传标记的镜像

docker push 117.78.10.191:5000/jdk1.8

6.3 搭建带认证的私有仓库

在服务器上:

第一步:删除先前创建的无认证的仓库容器

docker rm -f my-registry

第二步:创建存放认证用户名和密码的文件:

mkdir **/my-registry/**auth -p

第三步:创建密码验证文件。注意将将USERNAMEPASSWORD**替换为设置的用户名和密码

**docker run --**entrypoint htpasswd **registry -**Bbn **USERNAME PASSWORD > /my-registry/auth/**htpasswd

第四步:重新启动仓库镜像

docker run -d -p 8000:5000 --restart=always --name docker-registry \
-v /my-registry/registry:/var/lib/registry \
-v /my-registry/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
registry

6.4 带认证的私有仓库 -上传、下载镜像

在本地机器上:

第一步:首先登录到服务器

docker login -u username -p password 47.94.153.230:8000

第二步:然后执行pull或者push命令
第三步:操作完毕后,可以退出登录

docker logout 47.94.153.230:8000

这是如果想查看仓库中已有的镜像,那么需要进行http验证才可以。可以直接借助浏览器访问47.94.153.230:8000/v2/_catalog就可以访问了

注意这里:47.94.153.230指服务器IP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值