docker 学习笔记

阿里云Docker Registry registry.cn-chengdu.aliyuncs.com/xiafeng/docker
$ sudo docker login --username=wind_627@163.com registry.cn-chengdu.aliyuncs.com
示例 使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry.aliyuncs.com/acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB
$ sudo docker tag 37bb9c63c8b2 registry-vpc.cn-chengdu.aliyuncs.com/acs/agent:0.7-dfb6816

使用 "docker push" 命令将该镜像推送至远程。
$ sudo docker push registry-vpc.cn-chengdu.aliyuncs.com/acs/agent:0.7-dfb6816

常用命令
clear 清
cat 查看文件
touch 创建文件
curl 访问地址
localhost
shutdown -h now
uname -r

配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://e7m5fxhx.mirror.aliyuncs.com",
"https://hub-mirror.c.163.com/",
"https://reg-mirror.qiniu.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://e7m5fxhx.mirror.aliyuncs.com",
"https://hub-mirror.c.163.com/",
"https://reg-mirror.qiniu.com"]
}

2.需要的安装包

yum install -y yum-utils

3.设置镜像的仓库

yum-config-manager \ --add-repo \https://download.docker.com/linux/centos/docker-ce.repo

默认是从国外的,不推荐

推荐使用国内的

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

更新yum软件包索引

yum makecache fast

4.安装docker相关的 docker-ce 社区版 而ee是企业版

yum install docker-ce docker-ce-cli containerd.io

6. 使用docker version查看是否按照成功

systemctl enable docker 开机自启动
systemctl start docker 启动
sudo systemctl restart docker 重启docker

docker images 查看一下下载的镜像
docker run hello-world 测试
/var/lib/docker 是docker的默认工作路径!

1.帮助命令
docker version #显示docker的版本信息。
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令

帮助文档的地址:https://docs.docker.com/engine/reference/commandline/build/

2.镜像命令
docker images #查看所有本地主机上的镜像 可以使用docker image ls代替
docker search 搜索镜像
docker pull 下载镜像 docker image pull
docker rmi -f 镜像id #删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id 镜像id#删除指定的镜像
docker rmi -f $(docker images -aq) #删除全部的镜像
docker rmi -f $(docker images -aq) 全部

3.容器命令
docker run 镜像id 新建容器并启动
docker ps 列出所有运行的容器 docker container list
docker rm 容器id 删除指定容器
docker start 容器id #启动容器
docker restart容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器

docker run [可选参数] image | docker container run [可选参数] image

参书说明

--name="Name" 容器名字 tomcat01 tomcat02 用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080(宿主机):8080(容器)
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P(大写) 随机指定端口

测试、启动并进入容器

docker run -it centos /bin/bash
exit #容器直接退出
ctrl +P +Q #容器不停止退出

删除容器

docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -rf
docker rm -f $(docker ps -aq) #删除指定的容器
docker ps -a -q|xargs docker rm #删除所有的容器

启动和停止容器的操作

docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器

后台启动命令

docker run -d centos

查看镜像的元数据

命令

docker inspect 容器id
查看容器中进程信息 ps

docker top 容器id

入当前正在运行的容器

我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置

命令

docker exec -it 容器id /bin/bash

方式二

docker attach 容器id
从容器内拷贝到主机上

docker cp 容器id:容器内路径 主机目的路径

进入docker容器内部

~ docker exec -it 55321bcae33d /bin/bash
[root@55321bcae33d /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr

新建一个文件

[root@55321bcae33d /]# echo "hello" > java.java
[root@55321bcae33d /]# cat java.java
hello
[root@55321bcae33d /]# exit
exit
~ docker cp 55321bcae33d:/java.java / #拷贝
~ cd /
/ ls #可以看见java.java存在

Docker 安装Nginx

1. 搜索镜像 search 建议大家去docker搜索,可以看到帮助文档

2. 拉取镜像 pull

3. 运行测试

-d 后台运行

--name 给容器命名

-p 宿主机端口:容器内部端口

docker run -d --name nginx01 -p 8080:80 nginx
curl localhost:3344 #测试

docker 来装一个tomcat

官方的使用

docker run -it --rm tomcat:9.0

之前的启动都是后台,停止了容器,容器还是可以查到

docker run -it --rm image 一般是用来测试,用完就删除(暂时不建议)

--rm Automatically remove the container when it exits

下载

docker pull tomcat

启动运行

docker run -d -p 8080:8080 --name tomcat01 tomcat

测试访问有没有问题

curl localhost:8080

进入容器

~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
db09851cf82e tomcat "catalina.sh run" 28 seconds ago Up 27 seconds 0.0.0.0:8080->8080/tcp tomcat01
~ docker exec -it db09851cf82e /bin/bash
root@db09851cf82e:/usr/local/tomcat#

发现问题:1、linux命令少了。 2.没有webapps

阿里云镜像(阉割版),它为保证最小镜像,将不必要的都剔除了→保证最小可运行环境!

Docker可视化portainer

运行如下命令即可 打开可视化服务

docker run -d -p 8080:9000
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

访问:http://ip:8080/

使用数据卷
方式一 :直接使用命令挂载 -v
docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口
~ docker run -it -v /home/ceshi:/home centos /bin/bash

通过 docker inspect 容器id 查看

实战:安装MySQL

获取mysql镜像

~ docker pull mysql:5.7

运行容器,需要做数据挂载 #安装启动mysql,需要配置密码的,这是要注意点!

参考官网hub

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

启动我们得

-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
-- name 容器名字
~ docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=windxf --name mysql01 mysql:5.7

启动成功之后,我们在本地使用sqlyog来测试一下

sqlyog-连接到服务器的3306--和容器内的3306映射

在本地测试创建一个数据库,查看一下我们映射的路径是否ok!

具名和匿名挂载
-v 容器内路径!
docker run -d -P --name nginx01 -v /etc/nginx nginx

查看所有的volume的情况

~ docker volume ls
DRIVER VOLUME NAME
local 33ae588fae6d34f511a769948f0d3d123c9d45c442ac7728cb85599c2657e50d
local

这里发现,这种就是匿名挂载,我们在 -v只写了容器内的路径,没有写容器外的路劲!

####### 具名挂载 ###########
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
docker volume ls
DRIVER VOLUME NAME
local juming-nginx

通过 -v 卷名:容器内路径

查看一下这个卷

docker volume inspect

所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data下

三种挂载: 匿名挂载、具名挂载、指定路径挂载

-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的
拓展:

通过 -v 容器内路径: ro rw 改变读写权限

ro #readonly 只读
rw #readwrite 可读可写
docker run -d -P --name nginx05 -v juming:/etc/nginx:ro nginx
docker run -d -P --name nginx05 -v juming:/etc/nginx:rw nginx

ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!

创建一个自己的centos

1.编写Dockerfile文件

vim mydockerfile-centos

FROM centos
VOLUME ["volume01","volume02"] #创建数据卷01.02
CMD echo "-----end----"
CMD /bin/bash

FROM centos
MAINTAINER cheng1204598429@qq.com

ENV MYPATH /usr/local #设置环境变量
WORKDIR $MYPATH #设置工作目录

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80 #设置暴露的端口

CMD echo $MYPATH
CMD echo "-----end----"
CMD /bin/bash

2、通过这个文件构建镜像

命令 docker build -f 文件路径 -t 镜像名:[tag] .

docker build -f /home/testcentos/dockerfile1 -t windcentos:1.0 .

!!!!!同步数据卷
《docker run -it --name docker01 windcentos:1.0》
《docker run -it --name docker02 --volumes-from docker01 windcentos:1.0 》
文件的本地/var/lib/docker/volumes下
docker build -f mydockerfile-centos -t mycentos:0.1 .

测试运行
docker run -it 9e104981433f /bin/bash

"Name": "572b5ea38896d8a4c8f163e1e5529f926df0776ee266623eabecebb55c1ce7dc",
"Source": "/var/lib/docker/volumes/572b5ea38896d8a4c8f163e1e5529f926df0776ee266623eabecebb55c1ce7dc/_data",
"Destination": "volume01",

多个mysql实现数据共享
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7

这个时候,可以实现两个容器数据同步!

DockerFile构建过程

DockerFile常用指令

FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的, 姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
COPY # 类似ADD,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量!

编写Dockerfile文件
mkdir Dockerfile
vim mycentos
1 FROM centos
2 MAINTAINER wind<123.qq.com>
3
4 ENV MYPATH /usr/local
5 WORKDIR $MYPATH
6
7 RUN yum -y install vim
8 RUN yum -y install net-tools
9
10 EXPOSE 80
11
12 CMD echo $MYPAIH
13 CMD echo "----end----"
14 CMD /bim/bash

docker build -f mycentos -t mycentos:0.1 .

docker run -it mycentos:0.1

我们可以列出本地进行的变更历史 看看别人怎么配置的。
docker history 2836a03e922f

八、Docker 网络
1.理解Docker 0
ip addr 查看网络

1、我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要按照了docker,就会有一个docker0桥接模式,使用的技术是veth-pair技术!
https://www.cnblogs.com/bakari/p/10613710.html
再次测试ip add
我们发现这个容器带来网卡,都是一对对的
veth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一端连着协议,一端彼此相连
正因为有这个特性 veth-pair 充当一个桥梁,连接各种虚拟网络设备的
OpenStac,Docker容器之间的连接,OVS的连接,都是使用veth-pair技术

结论:tomcat01和tomcat02公用一个路由器,docker0。

所有的容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用ip。

3.自定义网络
docker network
connect -- Connect a container to a network
create -- Creates a new network with a name specified by the
disconnect -- Disconnects a container from a network
inspect -- Displays detailed information on a network
ls -- Lists all the networks created by the user
prune -- Remove all unused networks
rm -- Deletes one or more networks

docker network ls

bridge :桥接 docker(默认,自己创建也是用bridge模式)

none :不配置网络,一般不用

host :和所主机共享网络

container :容器网络连通(用得少!局限很大)

5实战:部署Redis集群

posted @ 2020-11-02 11:13  wind_627  阅读(92)  评论(0编辑  收藏  举报