杭州营销网站建设平台,视频网站建设工具,经典软文案例标题加内容,asp做网站得多长时间目录
1. 安装docker
2. 配置C环境
1#xff09;启动ubuntu:22.04容器
2#xff09;配置编译环境G
3#xff09;安装软件
4#xff09;测试
1. 如何打包容器生成tar#xff1f;
a. 生成容器镜像
b. 将镜像压缩成tar
2. 如何将容器内部的端口映射至宿主机#xf…目录
1. 安装docker
2. 配置C环境
1启动ubuntu:22.04容器
2配置编译环境G
3安装软件
4测试
1. 如何打包容器生成tar
a. 生成容器镜像
b. 将镜像压缩成tar
2. 如何将容器内部的端口映射至宿主机
a. 使用 -p 选项启动容器并映射端口
b. 验证端口映射
c. 在外部客户端访问服务 我这里将我如何在linux服务器中安装docker以及在容器中配置C环境的步骤以及遇到的一些问题总结如下。
参考
https://www.bilibili.com/video/BV12z4y147y3?vd_sourcecb95e3058c2624d2641da6f4eeb7e3a1www.bilibili.com/video/BV12z4y147y3?vd_sourcecb95e3058c2624d2641da6f4eeb7e3a1https://link.zhihu.com/?targethttps%3A//www.bilibili.com/video/BV12z4y147y3%3Fvd_source%3Dcb95e3058c2624d2641da6f4eeb7e3a1
恋恋风辰官方博客llfc.club/category?catid225RaiVNI8pFDD5L4m807g7ZwmF#!aid/2Suf5jJjQEVKDClYNgIiKV9ipcbhttps://link.zhihu.com/?targethttps%3A//llfc.club/category%3Fcatid%3D225RaiVNI8pFDD5L4m807g7ZwmF%23%21aid/2Suf5jJjQEVKDClYNgIiKV9ipcb
Linux系统安装 docker 容器及部署项目blog.csdn.net/weixin_67722778/article/details/139717151编辑https://link.zhihu.com/?targethttps%3A//blog.csdn.net/weixin_67722778/article/details/139717151
解决docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http: request cancblog.csdn.net/Liiiiiiiiiii19/article/details/142438122编辑https://link.zhihu.com/?targethttps%3A//blog.csdn.net/Liiiiiiiiiii19/article/details/142438122 1. 安装docker
更新软件列表
sudo apt update
安装依赖项以允许使用 HTTPS 通过 APT 获取 Docker
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
将 Docker APT 软件仓库添加到系统中
echo deb [archamd64 signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null
更新软件包列表并安装 Docker CE
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
验证 Docker 是否已成功安装
sudo docker run hello-world
我这里在前面几步都成功了但到最后一步的时候提示我连接超时如下 我尝试了国内很多镜像源比如阿里云的镜像源但仍然会有这个问题 最后找到解决办法
参考
解决docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http: request cancblog.csdn.net/Liiiiiiiiiii19/article/details/142438122编辑https://link.zhihu.com/?targethttps%3A//blog.csdn.net/Liiiiiiiiiii19/article/details/142438122
首先打开daemon.json文件
sudo nano /etc/docker/daemon.json
在该文件中写入
{registry-mirrors: [https://docker.registry.cyou,
https://docker-cf.registry.cyou,
https://dockercf.jsdelivr.fyi,
https://docker.jsdelivr.fyi,
https://dockertest.jsdelivr.fyi,
https://mirror.aliyuncs.com,
https://dockerproxy.com,
https://mirror.baidubce.com,
https://docker.m.daocloud.io,
https://docker.nju.edu.cn,
https://docker.mirrors.sjtug.sjtu.edu.cn,
https://docker.mirrors.ustc.edu.cn,
https://mirror.iscas.ac.cn,
https://docker.rainbond.cc]
}
ctrlx保存点yenter退出。
重载系统守护进程并重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
重新拉取docker hello world
sudo docker pull hello-world
启动容器
sudo docker run hello-world
如果输出“Hello from Docker!”那么容器拉取运行成功 2. 配置C环境
该过程参考博主恋恋风辰
恋恋风辰官方博客llfc.club/category?catid225RaiVNI8pFDD5L4m807g7ZwmF#!aid/2Suf5jJjQEVKDClYNgIiKV9ipcbhttps://link.zhihu.com/?targethttps%3A//llfc.club/category%3Fcatid%3D225RaiVNI8pFDD5L4m807g7ZwmF%23%21aid/2Suf5jJjQEVKDClYNgIiKV9ipcb
1启动ubuntu:22.04容器
sudo docker run -itd --name cppubuntu ubuntu:22.04
itd
ubuntu:22.04 乌班图版本为22.04 出现这一段内容代表镜像拉取成功输入‘sudo docker ps’查看容器 进入容器复制容器id我这里是‘5d2a7e6c07cb’然后输入
sudo docker exec -it 5d2a7e6c07cb /bin/bash
以bash脚本的方式进入容器查看该系统是什么样的
进入以后用户名发生了改变我之前的用户名是‘yuanwenzhengnwpu232:’但进入容器后是 2配置编译环境G
当前目录下创建一个test子目录
mkdir ./test
容器内更新源安装最新的软件包
apt-get update 配置C编译环境容器内安装gcc/g工具包
apt install build-essential
然后点y确定安装成功 测试安装的版本是否支持C17
echo #include iostream test.cpp
将‘#include iostream’输入至test.cpp并将cpp移动至test文件中
mv ./test.cpp ./test
并cd至test文件中
cd ./test/
文件中只有test.cpp一个文件 然后将main函数加入至test.cpp文件中将c版本输出
echo int main() { std::cout __cplusplus std::endl; return 0; } test.cpp
使用g编译test.cpp文件c版本为17输入test执行文件
g -stdc17 test.cpp -o test
这里执行test
./test 这里输出‘201703’版本输出成功因为C17是2017年3月制定的标准。
3安装软件
安装vim
apt install vim
测试vim输入
vim ./test.cpp vim安装成功
安装wget
apt install wget
获取boost库的源码包我这里的boost版本是1.86.0
wget https://archives.boost.io/release/1.86.0/source/boost_1_86_0.tar.gz
如果下载太慢可以将文件下载好上传至宿主机然后在宿主机输入不能在容器内输入
sudo docker cp /home/ubuntu/boost_1_86_0.tar.gz cppubuntu:/test
这里docker容器从路径“/home/ubuntu/boost_1_86_0.tar.gz”copy至“cppubuntu:/test”
安装boost需要的一些库
apt-get install python3-dev autotools-dev libicu-dev build-essential libbz2-dev libboost-all-dev
因为 python-dev 包已经被废弃可以使用 python-dev-is-python3 或 python2-dev 作为替代方案自己选择具体的python版本进行安装我这里选择python3.
解压boost库并安装
首先确保你在当前工作目录下已下载boost库压缩包 然后输入
tar zxvf boost_1_86_0.tar.gz
然后进入boost文件中配置向导预先设置安装目录为usr并安装
cd ./boost_1_86_0
./bootstrap.sh --prefix/usr/
./b2 install
安装完成后显示 安装git
apt install git
安装成功后进行git初始化
git config --global user.name Qbb
git config --global user.email qbbmail.nwpu.edu.cn
git init
初始化用户名和邮箱并在当前目录下设置初始化一个新的Git仓库输入下面代码验证初始化是否成功
git config --global user.name
git config --global user.email
安装cmke
wget https://github.com/Kitware/CMake/releases/download/v3.27.0/cmake-3.27.0.tar.gz
如果安装太慢可以在下载好上传至宿主机然后再宿主机内输入
sudo docker cp /mnt/datab/home/yuanwenzheng/C/cmake-3.27.0.tar.gz cppubuntu:/test
安装必要的ssl库
apt install libssl-dev
解压cmake压缩包
tar -zxvf cmake-3.27.0.tar.gz
解压后进入‘cmake-3.27.0’文件夹内
./cmake-3.27.0/
设置引导程序
./bootstrap
make
make install
测试
cmake --version 出现该界面说明cmake安装成功
4测试
进入test目录创建一个code并将该目录下所有test文件移除只保留code文件最后进入code文件
mkdir code
rm -rf ./test*
cd ./code/
创建一个helloboost.cpp文件并编辑
vim ./helloboost.cpp
键盘点击‘i’进入插入模式粘贴将boost版本输出
#include iostream
#include boost/version.hpp
using namespace std;
int main() {cout Boost 版本 BOOST_VERSION endl;return 0;
}
然后点击esc输入‘:wq’保存退出文件
使用g编译该文件生成helloboost 执行文件
g -o helloboost ./helloboost.cpp
执行helloboost 文件
./helloboost boost版本号被成功输出boost被成功安装
拉取我们执行写的服务器代码并进行测试我们直接拉取博主恋恋风辰的个人仓库
git clone https://gitee.com/secondtonone1/boostasio-learn.git
cd至networl文件夹下
cd ./boostasio-learn/network/
选择‘day06-AsyncServer’这个代码文件这个文件用于搭建一个最简单的异步服务器
这里首先写一个cmakelist然后通过cmakelist生成makefile文件再该文件下执行make生成可执行文件AsyncServer运行即可测试。
编写makelist.txt
进入‘/test/code/boostasio-learn/network/day05-AsyncServer’目录下输入
vim ./CMakeLists.txt
输入以下内容
cmake_minimum_required(VERSION 3.12)
project(AsyncServer)
# 设置 C 标准
set(CMAKE_CXX_STANDARD 17)
# 设置 Boost 的路径
set(BOOST_ROOT /usr)
# 查找 Boost 库的组件
find_package(Boost REQUIRED COMPONENTS system thread)
# 添加可执行文件和源文件
file(GLOB SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/day06-AsyncServer/*.cpp)
add_executable(AsyncServer ${SOURCES})
# 包含头文件路径包括其他目录
target_include_directories(AsyncServer PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/day06-AsyncServer ${CMAKE_CURRENT_SOURCE_DIR}/other_directory# 添加其他目录路径...
)
# 包含 Boost 头文件路径
target_include_directories(AsyncServer PRIVATE ${Boost_INCLUDE_DIRS})
# 链接 Boost 库
target_link_libraries(AsyncServer PRIVATE ${Boost_LIBRARIES})
cmake_minimum_required:表示cmake所需的最低版本为3.12project(AsyncServer)项目名称为AsyncServerset(CMAKE_CXX_STANDARD 17)C标准设置为C17set(BOOST_ROOT /usr)Boost库的路径为/usrfind_package(Boost REQUIRED COMPONENTS system thread)查找 Boost 库所需的组件比如COMPONENTS system threadfile(GLOB SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/day06-AsyncServer/*.cpp)将所有的cpp文件定义到一个SOURCES 变量中这里将CMAKE_CURRENT_SOURCE_DIR当前cmake目录下下day06-AsyncServer 目录下所有扩展名为 .cpp 的文件添加到 SOURCES 变量中。这一步是为了添加源文件。add_executable(AsyncServer ${SOURCES})添加可执行文件使用 ${SOURCES} 中包含的所有源文件来编译并生成一个目标AsyncServer定义包含目录为AsyncServer 目标添加头文件搜索路径确保当 AsyncServer 编译时这些路径中的头文件可以被找到并正确引用。PRIVATE是访问级别它指定这些目录仅在目标 AsyncServer 的编译过程中可见cmake支持以下三种访问级别 PRIVATE仅当前目标可以访问这些目录其他依赖于这个目标的项目无法访问。PUBLIC当前目标和依赖于这个目标的其他目标都可以访问这些目录。INTERFACE仅依赖于当前目标的其他目标可以访问这些目录但当前目标本身不能访问。包含 Boost 头文件路径为 AsyncServer 目标添加 Boost 库的头文件目录以便在编译时能够找到并使用 Boost 库的头文件${Boost_INCLUDE_DIRS}包含了 Boost 库头文件的路径通常在找到 Boost 库后CMake 会将头文件路径存储在这个变量中链接 Boost 库将 Boost 库链接到 AsyncServer 目标使其在编译过程中能够找到并链接到 Boost 的库文件。${Boost_LIBRARIES}这个变量包含了 CMake 找到的 Boost 库的链接路径这个变量通常在调用 find_package(Boost REQUIRED COMPONENTS system thread) 后被定义
最后新建目录build, 进入build目录执行cmake ..
mkdir build
cd ./build/cmake .. 执行‘make’即可编译该项目
make 生成了‘AsyncServer’可执行文件执行该文件即可启动服务器
./AsyncServer 我顺便学习了如何将生成的容器生成镜像并打包成压缩文件并在其他机器上下载使用以及如何将容器内部的端口映射至宿主机。总结如下
1. 如何打包容器生成tar
为了避免在其他平台使用该代码需要重复配置容器环境这里学习如何将配置好的docker容器打包生成压缩文件tar。
a. 生成容器镜像
首先将容器生成镜像如果创建了并启动一个容器后必须将其保存为新的镜像不然该容器不会显示在镜像列表中输入“sudo docker images”不会看见该镜像只有输入“sudo docker ps”才能看见正在运行的容器。所以如果想将配置好的容器生成为镜像必须输入下面的内容 sudo docker commit cppubuntu cppubuntu:1.0
b. 将镜像压缩成tar
sudo docker save -o cppubuntu.tar cppubuntu:1.0
sudo docker save -o /path/to/your/directory/cppubuntu.tar cppubuntu:1.0
将cppubuntu.tar保存下来该文件可以传输到其他机器或系统中使用。
在其他机器上使用 docker load 命令来加载这个镜像
sudo docker load -i cppubuntu.tar
加载后可以使用 docker images 查看是否成功导入镜像然后像平常一样通过 docker run 命令启动容器。
sudo docker images
然后输入以下命令即可运行该容器
sudo docker run -itd --name testubuntu cppubuntu:1.0
如果想进入这个容器输入以下内容
sudo docker ps
sudo docker exec -it testubuntu /bin/bash
第一行命令将列出所有正在运行的容器及其信息
第二行命令进入指定容器-it 参数用于交互式终端/bin/bash 表示想要使用的 shell testubuntu 是在运行该容器时为其指定的名称“sudo docker run -itd --name testubuntu cppubuntu:1.0”
最后可以使用exit命令退出容器
exit
2. 如何将容器内部的端口映射至宿主机
因为容器的ip和宿主机的ip不同容器的ip随时都可能会发生变变化在这种情况下需要将容器内部的一个断开抛出去这样启动容器的时候将该端口带上就会映射成宿主机的一个端口那么外部的客户端访问宿主机的该端口就会进入至容器内部访问到AsyncServer。比如
a. 使用 -p 选项启动容器并映射端口
当启动容器时使用 -p 参数来映射宿主机和容器的端口。假设 AsyncServer 在容器内监听 8080 端口可以这样启动容器
docker run -d -p 8080:8080 cppubuntu
-d以后台模式启动容器-p 8080:8080将宿主机的 8080 端口映射到容器内的 8080 端口。这样外部客户端访问宿主机的 8080 端口时会被转发到容器内部的 8080 端口
b. 验证端口映射
启动容器后可以通过 docker ps 查看运行中的容器及其端口映射情况
docker ps
输出示例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc123def456 cppubuntu /bin/sh -c ... 5 seconds ago Up 5 seconds 0.0.0.0:8080-8080/tcp cppcontainer
这里可以看到宿主机的 8080 端口已经成功映射到容器的 8080 端口。
c. 在外部客户端访问服务
现在外部的客户端可以通过访问宿主机的 IP 地址和端口号 8080 来访问容器内部的 AsyncServer 服务。例如
http://宿主机IP:8080
这样无论容器的 IP 如何变化外部都可以通过宿主机的端口来稳定地访问容器内部的服务。