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

wget https://download.docker.com/linux/static/stable/x86_64/docker-26.1.1.tgz
tar xf docker-26.1.1.tgz
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:// --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
  • 二进制安装 docker-compose

wget https://github.com/docker/compose/releases/download/v2.27.0/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