xshell和xftp软件下载
链接:https://pan.baidu.com/s/1G7DIw14UvOmTwU9SwtYILg
提取码:he18
--来自百度网盘超级会员V6的分享
docker相关资料:
链接:https://pan.baidu.com/s/1VcxvuJvBIKNKnUUHPlM3MA
提取码:6w5e
--来自百度网盘超级会员V6的分享
Docker中有几个重要的概念:
镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器进程做隔离,对外不可见。
一切应用最终都是代码组成,都是硬盘中的一个个的字节形成的文件。只有运行时,才会加载到内存,形成进程。
而镜像,就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。这个文件包是只读的。
容器呢,就是将这些文件中编写的程序、函数加载到内存中允许,形成进程,只不过要隔离起来。因此一个镜像可以启动多次,形成多个容器进程。例如你下载了一个QQ,如果我们将QQ在磁盘上的运行文件及其运行的操作系统依赖打包,形成QQ镜像。然后你可以启动多次,双开、甚至三开QQ。
docker pull nginx
也可以指定版本
docker pull nginx:1.22.1
docker images
利用docker save将nginx镜像导出磁盘,然后再通过load加载回来
1)使用docker save导出镜像到磁盘。运行命令:
docker save -o nginx.tar nginx:latest
2)先删除本地的nginx镜像
docker rmi nginx:latest
3)然后运行命令,加载本地文件:
docker load -i nginx.tar
容器保护三个状态:
运行:进程正常运行
暂停:进程暂停,CPU不再运行,并不释放内存
停止:进程终止,回收进程占用的内存、CPU等资源
其中:
docker run:创建并运行一个容器,处于运行状态
docker pause:让一个运行的容器暂停
docker unpause:让一个容器从暂停状态恢复运行
docker stop:停止一个运行的容器
docker start:让一个停止的容器再次运行
docker rm:删除一个容器
docker run --name mn -p 80:80 -d nginx
命令解读:
docker run :创建并运行一个容器
--name : 给容器起一个名字,比如叫做mn
-p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-d:后台运行容器
nginx:镜像名称,例如nginx
1)进入刚刚创建的容器:
docker exec -it mn bash
命令解读:
docker exec :进入容器内部,执行一个命令
-it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
mn :要进入的容器的名称
bash:进入容器后执行的命令,bash是一个linux终端交互命令
2)进入nginx的HTML所在目录 /usr/share/nginx/html。
查看DockerHub网站中的nginx页面,可以知道nginx的html目录位置在/usr/share/nginx/html
cd /usr/share/nginx/html
3)修改内容
容器内没有vi命令,无法直接修改,我们用下面的命令来修改:
sed -i -e 's#Welcome to nginx#欢迎您#g' -e 's###g' index.html
在浏览器访问自己的虚拟机地址,例如:http://192.168.150.101,即可看到结果。
4)其他
查看容器日志的命令:
docker logs
docker logs -f
添加 -f 参数可以持续查看日志
查看容器状态:
docker ps
docker ps -a
docker ps -a 查看所有容器,包括已经停止的
5)删除容器
docker rm nginx
加上-f可以强制删除
docker rm -f nginx
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。
数据卷操作的基本语法如下:
docker volume [COMMAND]
docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:
create 创建一个volume
inspect 显示一个或多个volume的信息
ls 列出所有的volume
prune 删除未使用的volume
rm 删除一个或多个指定的volume
- docker volume create html
- docker volume ls
查看数据卷的详细信息
docker volume inspect html
可以看到,创建的html这个数据卷关联的宿主机目录为/var/lib/docker/volumes/html/_data
目录。
在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录,命令格式如下:
- docker run \
- --name mn \
- -v html:/root/html \
- -p 8080:80
- nginx \
“\”表示换行。-v就是挂载数据卷的命令:
-v html:/root/html
:把html数据卷挂载到容器内的/root/html这个目录中需求:创建一个nginx容器,修改容器内的html目录内的index.html内容。
1)根据前面,已经知道nginx的html目录所在位置/usr/share/nginx/html
docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx
2)进入html数据卷所在位置
- # 查看html数据卷的位置
- docker volume inspect html
- # 进入该目录
- cd /var/lib/docker/volumes/html/_data
3)修改
方法一:vim
- # 修改文件
- vim index.html
方法二:使用vscode
xshell配合打开Xftp软件,
工具,选项,高级,选择一个编辑器(比如vscode)
右键选择vscode打开
修改内容如下:
- <head>
- "UTF-8">
Welcome to nginx! - html { color-scheme: light dark; }
- body { width: 35em; margin: 0 auto;
- font-family: Tahoma, Verdana, Arial, sans-serif; }
Welcome to nginx!欢迎您!!!
If you see this page, the nginx web server is successfully installed and
- working. Further configuration is required.
-
For online documentation and support please refer to
- Commercial support is available at
-
Thank you for using nginx.
访问nginx的结果为:
修改完毕,删除容器!
然后删除数据卷!
容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上。关联关系如下:
带数据卷模式:宿主机目录 --> 数据卷 ---> 容器内目录
直接挂载模式:宿主机目录 ---> 容器内目录
创建并运行一个MySQL容器,将宿主机目录直接挂载到容器
实现思路如下:
1)在将课前资料中的mysql.tar文件上传到虚拟机,通过load命令加载为镜像
2)创建目录/tmp/mysql/data
3)创建目录/tmp/mysql/conf,将课前资料提供的hmy.cnf文件上传到/tmp/mysql/conf
4)去DockerHub查阅资料,创建并运行MySQL容器,要求:
① 挂载/tmp/mysql/data到mysql容器内数据存储目录
② 挂载/tmp/mysql/conf/hmy.cnf到mysql容器的配置文件
③ 设置MySQL密码
1)通过Xftp传输mysql.tar到/tmp目录下
2)命令行转到tmp目录下,
cd /tmp/
3)load安装包
docker load -i mysql.tar
4)创建文件
- mkdir -p mysql/data
-
- mkdir -p mysql/conf
-
5)通过Xftp添加配置文件hmy.cnf到conf目录下
cd mysql/conf
6)挂载
此处设置密码为:password
- docker run \
- --name mysql \
- -e MYSQL_ROOT_PASSWORD=password \
- -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
- -v /tmp/mysql/data:/var/lib/mysql \
- -d \
- mysql:5.7.25
7)通过sqlyog或者其他软件连接,密码为自己设置的密码,本文为:password
8)删除数据卷和容器(镜像不用删除哦!),然后退出即可。
步骤1:tmp目录下新建一个空文件夹docker-demo
- cd /tmp
- mkdir docker-demo
步骤2:使用xftp拷贝docker-demo.jar,jdk8.tar.gz,Dockerfile文件到docker-demo这个目录
Dockerfile文件内容:
- # 指定基础镜像
- FROM ubuntu:16.04
- # 配置环境变量,JDK的安装目录
- ENV JAVA_DIR=/usr/local
-
- # 拷贝jdk和java项目的包
- COPY ./jdk8.tar.gz $JAVA_DIR/
- COPY ./docker-demo.jar /tmp/app.jar
-
- # 安装JDK
- RUN cd $JAVA_DIR \
- && tar -xf ./jdk8.tar.gz \
- && mv ./jdk1.8.0_144 ./java8
-
- # 配置环境变量
- ENV JAVA_HOME=$JAVA_DIR/java8
- ENV PATH=$PATH:$JAVA_HOME/bin
-
- # 暴露端口
- EXPOSE 8090
- # 入口,java项目的启动命令
- ENTRYPOINT java -jar /tmp/app.jar
步骤3:构建镜像命令(一定要注意1.0后有个空格,再加一个点):
docker build -t javaweb:1.0 .
成功后查看镜像:
docker images
步骤4:运行镜像命令:
docker run --name web -p 8090:8090 -d javaweb:1.0
最后访问 http://192.168.150.101:8090/hello/count,其中的ip改成你的虚拟机ip
步骤1:vscode修改Dockerfile文件内容,然后xftp覆盖掉原来的文件
Dockerfile文件修改如下:
- # 指定基础镜像
- FROM java:8-alpine
-
- # 拷贝jdk和java项目的包
- COPY ./docker-demo.jar /tmp/app.jar
-
- # 暴露端口
- EXPOSE 8090
- # 入口,java项目的启动命令
- ENTRYPOINT java -jar /tmp/app.jar
步骤2:运行镜像
docker build -t javaweb:2.0 .