- Published on
ubuntu下docker的安装与使用
- Authors
- Name
- Lif
添加apt的存储库
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -m 0755 -p /etc/apt/keyrings
# 下载证书
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 使用 echo 命令输出一个包含 Docker APT 源信息的字符串。
# 使用 dpkg 命令获取当前系统的架构信息,并将其插入到源信息字符串中。
# 使用 lsb_release 命令获取当前系统的发行版代号,并将其插入到源信息字符串中。
# 使用 tee 命令将源信息字符串写入到 /etc/apt/sources.list.d/docker.list 文件中,该文件将被 apt-get 命令用于更新 Docker 软件包。
# 使用重定向符号 > 将 tee 命令的输出重定向到 /dev/null,以便禁止在控制台上显示源信息字符串。
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装docker engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
文件目录
在ubuntu下docker
的文件目录通常是/var/lib/docker
但是这个目录只有root才能进去,需要转换成root权限
sudo su -
cd /var/lib/docker
/var 是 Linux 系统中的一个目录,用于存储在系统运行过程中经常变化的文件。其中包括:
日志文件:例如 /var/log 目录下保存了系统和应用程序的日志文件。
缓存文件:例如 /var/cache 目录下保存了安装软件时下载的缓存文件。
运行时数据:例如 /var/run 目录下保存了一些系统服务和进程运行时的状态信息。
邮件:例如 /var/mail 目录下保存了本地用户的邮件。
打印任务:例如 /var/spool 目录下保存了打印任务。
总之,/var 目录用于存储那些需要动态修改、增长或删除的数据。与之相对,/etc 目录则用于存储静态配置文件,/usr 目录则用于存储只读数据和应用程序。
其中/var/lib/docker/container
文件夹用来存放container,Docker
启动关闭
以mysql为例子
docker run -itd --name -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123123 mysql
# 启动一个mysql
# -p 3306:3306 使主机的3306映射到容器的3306 可以通过主机上的Mysql访问Mysql
# 每次docker run之后会生成一个容器,并且保存所有设定参数,这些参数很难修改,第二次直接start即可
关闭
docket stop mysql
启动
docker start mysql
开机启动
可以将docker container制作成服务,让他随系统启动而启动
sudo su -
cd /etc/systemed/system
touch docker-container.service
vim docker-container.service
添加如下
[Unit]
Description=Docker Container
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStart=/bin/bash -c "/usr/bin/docker start mysql1 && /usr/bin/docker start -a mysql2"
ExecStop=/bin/bash -c "/usr/bin/docker start -t 2 mysql1 && /usr/bin/docker start -t 2 mysql2"
[Install]
WantedBy=multi-user.target
# 这里启动的是两个容器/多个容器如果是一个可以改为
###########################################
# ExecStart=/usr/bin/docker start -a mysql
# ExecStop=/usr/bin/docker stop -t 2 mysql
容器内部设置
如果容器是一个ubuntu系统
可以通过docker exec -it image_name bash
的方式进入容器进行一些操作
如果有需要在容器启动的时候一起启动的程序,可以在容器内部配置
vim /root/.bashrc
在其中加入
# startup run
if [ -f /root/startup_run.sh ]; then
./root/startup_run.sh
fi
touch /root/startup_run.sh
vim /root/startup_run.sh
可以在这个文件里面添加需要执行的命令
# 比如我的容器里有一个jupyter notebook
#可以使用
nohup jupyter notebook --allow-root >> /root/jupyter.log 2>&1 &
这样设置完后,每次启动容器,都会启动一个jupyter notebook
容器的物理位置
docker run
之后会生成一个容器,位于/var/lib/docker/containers
文件夹中,但是这里面的文件夹名称很奇怪 都是这种,这其实是一个容器的Id
需要使用docker inspect
查看容器id
docker inspect container_name | grep 'Id'
# 在这里 grep是一个命令行搜索程序,可以搜索后边的参数,
# | 字符称为管道符号,它用于将一个命令的输出重定向到另一个命令作为输入,是一种最基础的管道
这样我们就可以通过`Id进入到容器目录, 、
容器修改
目录下的文件夹是这样的,可以对这些文件进性一些需要的修改,可以达到修改容器的效果
也可以使用
docker container update
来做一些修改,但限制很多
还有一种比较不容易出问题的方法,就是将容器封装回镜像,然后重新docker run
的时候添加参数
docker stop container_name
docker commit container_name new_name
docker run ......
# 在这里配置具体参数
# 比如端口 名称等