docker使用
安装docker
参考arch wiki和docker的weiki:
安装和卸载:
$ sudo pacman -S docker
Arch 启动Docker
Arch 下面是使用systemd来管理服务的,可以用systemctl命令来启动docker服务。
$ sudo systemctl start docker
如果想设置docker在arch下面开机自动启动,可以用下面的命令:
$ sudo systemctl enable docker
Arch下面删除Docker
删除Docker包。
$ sudo pacman -R docker
删除Docker包,同时删除其依赖的包。
重启docker
systemctl restart docker
删除Docker运行过程中产生的镜像、容器等文件。用户生成的配置文件需要手工删除。
$ rm -rf /var/lib/docker
china
Docker 官方中国区
https://registry.docker-cn.com
网易
http://hub-mirror.c.163.com
ustc
https://docker.mirrors.ustc.edu.cn
$ docker --registry-mirror=https://registry.docker-cn.com daemon
OR
nano /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
#修改保存后重启 Docker 以使配置生效
systemctl restart docker
运行centos容器
安装centos:
sudo docker pull centos
开启容器:
-p端口映射
-d后台运行
-v目录映射 本地数据:容器数据
docker run -p 80:80 -p 8888:8888 -i -d -v /opt/centos:/centos -t centos /bin/bash
进入:
docker exec -it containerId bash
停止:
docker stop containerId // containerId 是容器的ID
使用docker环境搭建lamp环境
lamp和资源文件全部映射到物理机 lamp环境使用bitnami-lampstack-7.1.19-1-linux-x64-installer.run 安装lamp选择安装到/centos/lampstack-7.1.19-1
docker run -p 80:80 -p 3306:3306 -i -d -v /home/lxx/centos:/centos -t centos /bin/bash
进入
docker exec -it CID bash
进入/centos/lampstack-7.1.19-1(即物理机/home/lxx/centos) mysql默认端口3306
./ctlscript.sh ?
usage: ./ctlscript.sh help
./ctlscript.sh (start|stop|restart|status)
./ctlscript.sh (start|stop|restart|status) mysql
./ctlscript.sh (start|stop|restart|status) apache
help - this screen
start - start the service(s)
stop - stop the service(s)
restart - restart or start the service(s)
status - show the status of the service(s)
进入phpmyadmin
phpmyadmin.example.com
如果docker启动失败提示:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/vhs/mysql-8.0.11-0/mysql/tmp/mysql.sock' (2)
解决方案(不一定有效)
#文件/vhs/mysql-8.0.11-0/mysql/tmp/mysql.sock.lock被锁住了,改为/vhs/mysql-8.0.11-0/mysql/tmp/mysql.sock
mv /vhs/mysql-8.0.11-0/mysql/tmp/mysql.sock.lock /vhs/mysql-8.0.11-0/mysql/tmp/mysql.sock
#启动
/vhs/mysql-8.0.11-0/mysql/bin/mysqld --user=root
/vhs/mysql-8.0.11-0/ctlscript.sh start mysql
打包自己的docker镜像环境包,导入导出
打包
docker commit 5577a1aad419 lxx/kangle:001
下次直接运行
docker run -p 80:80 -p 3311:3311 -p 8888:8888 -p 3306:3306 -i -d -v /home/lxx/centos:/vhs -t f4c4a6eec9c8 /bin/bash
删除镜像(先删除容器)
docker rm continnorID
删除容器记录
docker ps -a
docker ps -a|awk '{print $1}'|xargs docker rm
docker rmi imagesID
将镜像保存为本地文件
docker save imageID -o ./ct.tar
加载刚才本地tar文件
docker load -i ./ct.tar
重命名镜像名称
docker tag eb40dcf64078 lxx/kangle:001
复制文件
docker cp [file] [container_name]:[container_path]
docker cp ./cemu-2.0-4-ubuntu-20.04-x64.zip x112:/opt/
win使用nerdctl管理docker_host
https://github.com/containerd/nerdctl
centos7安装最新的docker
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum -y install docker-ce docker-ce-cli containerd.io
从二进制安装最新docker
export DOCKER_HOST=tcp://0.0.0.0:39012
sudo apt install iptables
# 资源目录
https://download.docker.com/linux/
# wget https://download.docker.com/linux/static/stable/x86_64/docker-29.3.0.tgz
wget https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-29.3.0.tgz
# wget https://mirror.sjtu.edu.cn/docker-ce/linux/static/stable/x86_64/docker-29.3.0.tgz
tar xf docker-29.3.0.tgz
# 如果是升级需要停止docker和containerd服务并替换文件
cp docker/* /usr/bin/
cat >/etc/systemd/system/containerd.service <<EOF
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=1048576
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
EOF
systemctl enable --now containerd.service
cat > /etc/systemd/system/docker.service <<EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:39012 --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP \$MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
OOMScoreAdjust=-500
[Install]
WantedBy=multi-user.target
EOF
# 准备docker的socket文件
cat > /etc/systemd/system/docker.socket <<EOF
[Unit]
Description=Docker Socket for the API
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
# 创建docker组
groupadd docker
systemctl daemon-reload
# 启动docker
systemctl enable --now docker.socket
systemctl enable --now docker.service
# 验证
docker info
# 创建docker配置文件
mkdir -p /etc/docker/
cat >/etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://docker.2011101.xyz"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
EOF
systemctl restart docker
# 运行失败检查错误日志
journalctl -u docker.service --no-pager|grep failed
二进制安装 docker-compose
wget https://github.com/docker/compose/releases/download/v5.1.2/docker-compose-linux-x86_64
mkdir -p $HOME/.docker/cli-plugins/
cp ./docker-compose-linux-x86_64 $HOME/.docker/cli-plugins/docker-compose
# 使用
docker compose
# OR
cp ./docker-compose-linux-x86_64 /usr/bin/docker-compose
# 使用
docker-compose
删除none镜像
docker images -f "dangling=true"
docker images -f "dangling=true" -q|xargs docker rmi
# 状态
docker system df
# 删除未使用的镜像,清理
# docker system prune -a --force
docker system prune
docker builder prune -f
迁移docker数据目录
sudo systemctl stop docker
sudo mkdir -p /home/.dockerdata
sudo mv /var/lib/docker /home/.dockerdata
# 创建软件链接
sudo ln -s /home/.dockerdata/docker /var/lib/docker
sudo systemctl start docker
磁盘占用分析doku
docker run --name doku -d -v /var/run/docker.sock:/var/run/docker.sock:ro -v /:/hostroot:ro -p 9090:9090 amerkurev/doku
phpmyadmin使用和配置,无须密码直接登录
phpmyadmin:
image: registry.cn-hangzhou.aliyuncs.com/jcleng/library-phpmyadmin:latest
ports:
- 3001:80
environment:
PMA_ARBITRARY: 1
MEMORY_LIMIT: 1024M
UPLOAD_LIMIT: 1024M
MAX_EXECUTION_TIME: 36000
volumes:
- "./config.user.inc.php:/etc/phpmyadmin/config.user.inc.php"
docker run -itd \
--name phpmyadmin \
-p 8080:80 \
-e PMA_ARBITRARY=1 \
-e MEMORY_LIMIT=1024M \
-e UPLOAD_LIMIT=1024M \
-e MAX_EXECUTION_TIME=36000 \
registry.cn-hangzhou.aliyuncs.com/jcleng/library-phpmyadmin:latest
// 无须密码直接登录
$i = 1;
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['host'] = '106.1.*.191';
$cfg['Servers'][$i]['user'] = 'sjdaj***sdsds';
$cfg['Servers'][$i]['password'] = 'pass***word!!';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
$i = 2;
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['host'] = '106.1.*.191';
$cfg['Servers'][$i]['user'] = 'sjdaj***sdsds';
$cfg['Servers'][$i]['password'] = 'pass***word!!';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
erikdubbelboer-phpredisadmin
redisadmin:
image: registry.cn-hangzhou.aliyuncs.com/jcleng/phpredisadmin
privileged: true
ports:
- 6380:80
volumes:
- "./config.redis.php:/src/app/includes/config.inc.php"
config.redis.php文件
<?php
include 'config.sample.inc.php';
$config['servers'] = array();
//
$config['servers'][] = array(
'name' => 'local_redis',
'host' => 'redis',
'port' => '6379',
'auth' => null
);
$config['max_tree_num'] = 10;
// 设置授权登录
$config['login'] = array(
'admin888' => array(
'password' => 'password888',
),
);
function print_namespace($item, $name, $fullkey, $islast) {
global $config, $server, $redis;
+ if (count($item) > $config['max_tree_num']) {
+ $is_morre = '/' . count($item);
+ $item = array_slice($item, 0, $config['max_tree_num']);
+ } else {
+ $is_morre = '';
+ }
- <a href="?view&s=<?php echo $server['id']?>&d=<?php echo $server['db']?>&key=<?php echo urlencode($fullkey)?>" title="<?php echo format_html($name)?>"><?php echo format_html($name)?><?php if ($len !== false) { ?><span class="info">(<?php echo $len?>)</span><?php } ?></a>
+ <a href="?view&s=<?php echo $server['id']?>&d=<?php echo $server['db']?>&key=<?php echo urlencode($fullkey)?>" title="<?php echo format_html($name)?>"><?php echo format_html($name)?><?php if ($len !== false) { ?><span class="info">(<?php echo $len . $is_morre?>)</span><?php } ?></a>
-<div class="icon"><?php echo format_html($name)?> <span class="info">(<?php echo count($item)?>)</span>
+<div class="icon"><?php echo format_html($name)?> <span class="info">(<?php echo count($item) . $is_morre?>)</span>
通过进程id找到docker
cat /proc/426916/cgrou
# 0::/system.slice/docker-10d4df7b1279287324583e7f664512c55d42f38a87b5d3383a3661e583ebdec5.scope
docker inspect 10d4df7b1279287324583e7f664512c55d42f38a87b5d3383a3661e583ebdec5|grep -C 3 "Name"
# 查看父级进程, 和NAME
cat /proc/380354/status|grep -C 20 PPid