docker学习记录

一、容器:

安装缺少vim命令处理
apt-get update && apt-get install vim

有镜像才能创建容器,这是根本前提(下载一个centos或者ubuntu镜像)docker pull centos/ubuntu

 docker run -it --name=ubuntu1 ubuntu /bin/bash

docker ps  列出所有的容器
			-a 列出当前所有正在运行的容器+历史上运行过的
			-l 显示最近创建的容器
			-n 显示最近n个创建的容器
			-q 静默模式,只显示容器编号

退出容器:

	1、exit   run进去容器,exit退出,容器停止
	2、 ctrl+p+q  run进去容器,ctrl+p+q 退出,容器不停止

docker start 容器id/名 启动容器
docker restart 容器id/名 重启
docker stop  容器id/名  停止
docker kill  容器id/名   强制停止容器

docker rm 容器id  删除已停止的容器

一次性删除多个容器实例:
	1、docker rm -f $(docker ps -a -q)
	2、docker ps -a -q | xargs docker rm


查看容器日志: docker logs 容器id

重新进入容器:

docker exec -it 容器id /bin/bash  
docker attach 容器id   重新进入
两者区别:attach直接进入容器启动命令的终端,不会启动新的进程;用exit退出,会导致容器的停止;
		 exec是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器停止;

复制:

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

导入/导出:

docker export 容器id > 文件名.tar
	CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
	2ad29ae9a8ba   ubuntu    "/bin/bash"   12 seconds ago   Up 11 seconds             loving_payne
	[root@localhost /]# docker export 2ad29ae9a8ba > u.tar


cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本
	[root@localhost /]# cat u.tar | docker import hzq/ubuntu:1.0.0
	open hzq/ubuntu:1.0.0: no such file or directory
	[root@localhost /]# cat u.tar | docker import - hzq/ubuntu:1.0.0
	sha256:3ba7bf6dc545d521074680b14595f1bc9d0a05f42757abd4f629ffa7c83a8c25
	[root@localhost /]# docker ps
	CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
	[root@localhost /]# docker images
	REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
	hzq/ubuntu    1.0.0     3ba7bf6dc545   16 seconds ago   0B

提交容器副本使之成为一个新的镜像:
docker commit -m=“提交的描述信息” -a=“作者” 容器id 要创建的目标镜像名:【标签名】
eg: docker commit -m=“新增vim命令功能” -a=“hza” 2ad29ae9a8ba ubuntu:1.2.0

镜像推送到阿里云:

1. 登录阿里云Docker Registry
$ docker login --username=15878******@sina.cn registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

2. 从Registry中拉取镜像
$ docker pull registry.cn-hangzhou.aliyuncs.com/hzq17636/test-ubuntu:[镜像版本号]
3. 将镜像推送到Registry
$ docker login --username=15878******@sina.cn registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/hzq17636/test-ubuntu:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/hzq17636/test-ubuntu:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

4. 选择合适的镜像仓库地址
从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录。

5. 示例
使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。

$ docker images
REPOSITORY                                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry.aliyuncs.com/acs/agent                                    0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB
$ docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
使用 "docker push" 命令将该镜像推送至远程。

$ docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

apt-get update
apt-get install net-tools --ifconfig

本地镜像发布到私有仓库:

1、docker pull registry 拉取registry镜像

2、 运行registry私有仓库  
	docker run -d -p 5000:5000 -v /hzq/myregistry/:/tmp/registry --privileged=true registry

3、 curl验证仓库
	curl -XGET http://192.168.101.65:5000/v2/_catalog
	[root@localhost /]# curl -XGET http://192.168.101.65:5000/v2/_catalog
	{"repositories":[]} 验证通过

4、将新镜像修改符合私服规范的tag
	公式:docker tag 镜像:tag Host:port/Registry:tag
	eg:docker tag myubuntu:1.0.0 192.168.101.65:5000/myubuntu:1.0.0

5、修改配置文件使之支持http
	[root@localhost /]# cat /etc/docker/daemon.json 
	{
	  "registry-mirrors": ["https://8iyr0vnh.mirror.aliyuncs.com"]
	}
	[root@localhost /]# vim /etc/docker/daemon.json 
	[root@localhost /]# cat /etc/docker/daemon.json 
	{
	  "registry-mirrors": ["https://8iyr0vnh.mirror.aliyuncs.com"],
	  "insecure-registries":["192.168.101.65:5000"]
	}
	[root@localhost /]# systemctl restart docker  --重启
	[root@localhost /]# 

6、push推送到私有仓库
	[root@localhost /]# docker images
	REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
	192.168.101.65:5000/myubuntu   1.0.0     37938b7ccef0   6 minutes ago   120MB
	myubuntu                       1.0.0     37938b7ccef0   6 minutes ago   120MB
	centos                         latest    5d0da3dc9764   2 years ago     231MB
	[root@localhost /]# docker push 192.168.101.65:5000/myubuntu:1.0.0

7、curl验证私服库上是否有新推送的镜像
	[root@localhost /]# curl -XGET http://192.168.101.65:5000/v2/_catalog
	{"repositories":["myubuntu"]}

8、pull到本地并运行
	 docker pull 192.168.101.65:5000/myubuntu:1.0.0

容器数据卷:

docker挂载主机目录访问如果出现cannot open directory.:Permission denied  
解决:在挂载目录后多加一个 --privileged=true 

1、宿主VS容器之间映射添加容器卷
	公式:docker run -it -v /宿主机目录:/容器内目录 ubuntu /bin/bash
	eg:docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=myu3 ubuntu /bin/bash
		root@91430fc9ca16:/# cd /tmp/docker_data/
		root@91430fc9ca16:/tmp/docker_data# ll
		total 0
		root@91430fc9ca16:/tmp/docker_data# touch dockerin.txt
		root@91430fc9ca16:/tmp/docker_data# ll
		-rw-r--r--. 1 root root  0 Sep 30 19:21 dockerin.txt
		root@91430fc9ca16:/tmp/docker_data# ll
		-rw-r--r--. 1 root root  0 Sep 30 19:21 a.txt
		-rw-r--r--. 1 root root  0 Sep 30 19:21 dockerin.txt
	
	查看是否挂载成功:
		docker inspect 容器id
			[root@localhost ~]# docker ps
			CONTAINER ID   IMAGE      COMMAND                   CREATED             STATUS             PORTS                                       NAMES
			91430fc9ca16   ubuntu     "/bin/bash"               7 minutes ago       Up 7 minutes                                                   myu3
			cb6828ea243d   registry   "/entrypoint.sh /etc…"   About an hour ago   Up About an hour   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   epic_kepler
			[root@localhost ~]# docker inspect 91430fc9ca16
				  "Mounts": [
				            {
				                "Type": "bind",
				                "Source": "/tmp/host_data",
				                "Destination": "/tmp/docker_data",
				                "Mode": "",
				                "RW": true,
				                "Propagation": "rprivate"
				            }
				        ],
	
	1.3 容器和宿主机之间的数据共享
		docker修改,主机同步获得;
		主机修改,docker同步获得;
		docker容器stop,主机修改,docker容器重启数据也同步过来;
	
2、读写规则映射添加说明 rw ro
	默认rw
	docker run -it -v /宿主机目录:/容器内目录:rw ubuntu /bin/bash
	
	ro 容器实例内部被限制,只能读取不能写
		docker run -it -v /宿主机目录:/容器内目录:rw ubuntu /bin/bash

3、卷的继承和共享 

	容器1完成了和宿主机的映射,容器2继承容器1的卷规则:-volumes-from 父类
		docker run -it --privileged=true --volumes-from 父类 --name=myu3 ubuntu /bin/bash

	[root@localhost host_data]# docker run -it --privileged=true --volumes-from myu3 --name=u4 ubuntu /bin/bash
		root@973ad59da23f:/# cd /tmp/docker_data/
		root@973ad59da23f:/tmp/docker_data# ll
		-rw-r--r--. 1 root root  0 Sep 30 19:21 a.txt
		-rw-r--r--. 1 root root  0 Sep 30 19:21 dockerin.txt
		root@973ad59da23f:/tmp/docker_data# touch u4.txt
		root@973ad59da23f:/tmp/docker_data# ll
		-rw-r--r--. 1 root root  0 Sep 30 19:21 a.txt
		-rw-r--r--. 1 root root  0 Sep 30 19:21 dockerin.txt
		-rw-r--r--. 1 root root  0 Sep 30 19:46 u4.txt
	u4继承了myu3的卷规则,不管u4/myu3新建文件都会同步到host,之间也会相互同步

docker常规软件安装步骤:

1. 搜索镜像
2. 拉取镜像
3. 查看镜像
4. 启动镜像 -服务端口映射
5. 停止容器
6. 移除容器

安装tomcat:

1. docker hub上查找tomcat镜像
	docker search tomcat
2. 从docker hub上拉取tomcat镜像到本地
	docker pull tomcat
3. docker images查看是否成功拉取到tomcat
	docker images tomcat
4. 运行tomcat镜像
	docker run -it -p 8080:8080 tomcat
5. 访问tomcat首页

(tomcat10 有webapps和webapps.dist目录,需要删了webapps,然后把webapps.dist改为webapps)在这里插入图片描述
在这里插入图片描述

6. 免修改版说明  安装tomcat8-jdk8版本

	 docker run -d -p 8080:8080 --name t2 billygoo/tomcat8-jdk8 

安装mysql:

  1. docker search mysql:5.7

  2. docker pull mysql:5.7

  3. docker images mysql

  4. 启动mysql
    docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
    在这里插入图片描述
    在这里插入图片描述
    docker安装数据库mysql会出现的问题:

  5. 没有用到卷,容器删除后,数据问题?
    docker run -d -p 3306:3306 --privileged=true -v /hzq/mysql/log:/var/log/mysql -v /hzq/mysql/data:/var/lib/mysql -v /hzq/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --name mysql mysql:5.7

     --privileged=true 表示开启容器数据卷的权限;这次创建 MySQL 中,增加了 3 个容器数据卷。
     
     -v /xsh/mysql/log/:/var/log/mysql 表示同步 MySQL 的日志到宿主机;
     
     -v /xsh/mysql/data/:/var/lib/mysql 表示同步 MySQL 的数据到宿主机;
     
     -v /xsh/mysql/conf/:/etc/mysql/conf.d 表示同步 MySQL 的配置到宿主机。
     
     -e MYSQL_ROOT_PASSWORD 设置的是 MySQL 的 root 用户的登录密码
    

    2.中文乱码?

     我们通过创建 my.cnf 里面配置 MySQL 的默认字符集为 UTF-8,然后通过容器数据卷同步给 MySQL 容器实例。
     在宿主机上进入 MySQL 容器数据卷的配置目录 /xsh/mysql/conf 。
     $ cd /xsh/mysql/conf
     发现里面为空。在这个目录下创建 my.cnf 配置文件。
     $ vim my.cnf
     然后把下面这段内容粘贴进去。
     [client]
     default_character_set=utf8
     [mysqld]
     collation_server = utf8_general_ci
     character_set_server = utf8
     然后重启mysql
     docker restart mysql 
    

**

docker安装redis:6.0.8

**
​​1、从docker hub上(阿里云加速器)拉取redis:6.0.8镜像到本地​​
docker pull redis:6.0.8
​​2、在centos宿主机下新建目录/hzq/redis
mkdir -p /hzq/redis
​​3、将一个redis.conf文件模版拷贝到/hzq/redis/目录下,并修改/hzq/redis下面的redis.conf文件​​
初始文件:
3.1 开启redis密码验证: requirepass 123
在这里插入图片描述
3.2 允许redis外部连接 注释掉 #bind 127.0.0.1
3.3 将daemonize yes 注释起来或则 设置成daemonize no,因为该配置和docker run中的-d参数冲突,会导致容器一直启动失败。
3.4 开启redis数据持久化appendonly yes
3.5 protected-mode 本机访问保护模式,设置no

	在Redis6.0中,多线程机制默认是关闭的,如果需要使用多线程功能,需要在redis.conf中完成两个设置
		设置io-thread-do-reads配置项为yes,表示启动多线程
		设置io-threads线程个数。关于线程数的设置,官方的建议是如果为 4 核的 CPU,建议线程数设置为 2 或 3,如果为 8 核 CPU 建议线程数设置为 6,线程数一定要小于机器核数,线程数并不是越大越好

​​4、使用redis:6.0.8镜像创建容器(也叫运行镜像)​​
docker run -p 6379:6379 --name redis3 --privileged=true -v /hzq/redis/redis.conf:/etc/redis/redis.conf -v /hzq/redis/data:/data -v /etc/localtime:/etc/localtime -d redis:6.0.8 redis-server /etc/redis/redis.conf

​5、进入容器并测试redis-cli​​
docker exec -it redis3 /bin/bash
redis-cli
在这里插入图片描述

​​6、验证redis配置文件使用的是修改外部数据卷中的redis.conf文件​​
把databases 15改为10 重启进入后select 15报错
在这里插入图片描述

**

安装Nginx:

**

**1.先在docker中运行nginx(为了知道相关的配置)**
# 拉取nginx镜像
docker pull nginx

#启动(暂时)
docker run -d --name nginx -p 80:80 nginx

#查看镜像
docker ps

#进入容器内部
docker exec -it nginx /bin/bash

#找到nginx.conf所在的地址(找到相关配置文件)
find / -name 'nginx.conf'
# 这里以/etc/nginx/nginx.conf为例

#推出容器
exit;

**2.将容器的配置文件 复制到 创建好的文件夹中**
#创建外部文件夹
mkdir -p /hzq/nginx/conf
mkdir -p /hzq/nginx/logs
mkdir -p /hzq/nginx/html

将容器的配置文件 复制到 创建好的文件夹中
docker cp nginx:/etc/nginx/nginx.conf /hzq/nginx/conf/
docker cp nginx:/etc/nginx/conf.d/ /hzq/nginx/conf/
docker cp nginx:/usr/share/nginx/html/ /hzq/nginx/
docker cp nginx:/var/log/nginx /hzq/nginx/logs

**3.启动nginx**

docker run -d --name nginx -p 80:80 -v /hzq/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /hzq/nginx/conf/conf.d:/etc/nginx/conf.d/ -v /hzq/nginx/logs:/var/log/nginx -v /hzq/nginx/html:/usr/share/nginx/html -e TZ=Asia/Shanghai --privileged=true nginx

**4.验证配置文件**
# 语法
docker exec [容器ID|容器名] nginx -t
docker exec [容器ID|容器名] nginx -s reload

#检验配置文件正确性
docker exec nginx nginx -t

#重新加载配置文件
docker exec nginx nginx -s reload

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值