Docker学习遇到的问题和心得

x33g5p2x  于2022-01-09 转载在 Docker  
字(1.2k)|赞(0)|评价(0)|浏览(315)

首先写一个直接启动可视化界面的命令:

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

下面说一下数据库的数据挂载:比如我们使用docker运行了MySQL的容器,然后将内部MySQL的存放数据的位置:/var/lib/mysql挂载在外部Linux系统位置:/home/mysql/data,然后启动以后使用Navicat连接数据库的时候出现了问题:

解决ERROR 1130: Host ‘192.168.1.3’ is not allowed to connect to this MySQL server 方法

这个原因是因为docker内部的数据库没有设置外部访问权限

解决方案:

首先进入内部数据库:使用docker exec:

然后进入数据库命令界面: mysql -u root -p

然后先使用数据库:use mysql

再 show tables:

再改user表:将权限改为%

然后就可以连接成功了

测试:

然后是Dockefile:

我们首先自己写一个dockerfile:

FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "-------end------"
CMD /bin/bash

然后构建他:注意最后有个.

docker build -f /home/docker-test-volume/dockerfile1 -t kuangshen/centos .

然后我们启动两个容器互相挂载:

总结:

1、docker从基础镜像运行一个容器
2、执行一条指令并对容器做出修改
3、执行类似 docker commit 的操作提交一个新的镜像层
4、Docker再基于刚提交的镜像运行一个新容器
5、执行dockerfile中的下一条指令直到所有指令都执行完成!

DockerFile指令:

FROM     # 基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER  # 镜像维护者的姓名混合邮箱地址
RUN      # 容器构建时需要运行的命令
EXPOSE    # 当前容器对外保留出的端口
WORKDIR    # 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
ENV      # 用来在构建镜像过程中设置环境变量
ADD      # 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY     # 类似ADD,拷贝文件和目录到镜像中!
VOLUME    # 容器数据卷,用于数据保存和持久化工作
CMD      # 指定一个容器启动时要运行的命令,dockerFile中可以有多个CMD指令,但只有最
后一个生效!
ENTRYPOINT  # 指定一个容器启动时要运行的命令!和CMD一样
ONBUILD    # 当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后,父镜像的
ONBUILD被触发

相关文章