docker拉取鏡像的命令為
docker pull image[:TAG]
如果我們想安裝的mysql版本不是最新的版本,則需要填充TAG,如果不帶上TAG,則默認安裝的為最新版本,雖然可以通過docker search查詢相關的鏡像信息,但該命令不會顯示其TAG,我們可以通過docker hub官網來獲取到docker中鏡像的TAG,如查詢mysql的TAG
1、登錄docker hub網站https://hub.docker.com/,並搜索mysql,得到mysql相關的Containers
2、點擊右側查詢出的mysql container(https://hub.docker.com/_/mysql?tab=tags),並選擇TAGS標簽,即可看到mysql相關的TAG
這里我們安裝的是8.0.17的mysql
一、拉取鏡像(如果使用docker run命令,可以忽略該步,docker run在不存在鏡像的情況下,會自動拉取鏡像,並且啟動該鏡像對應的容器,如果已經存在鏡像,則直接啟動鏡像對應容器)
docker pull mysql:8.0.17
二、啟動mysql容器,其中--name為指定容器名稱,-p暴露內部容器端口給宿主機,前一個端口為宿主機端口, -e為設置環境變量,-d為后台運行,mysql:8.0.17為鏡像名稱,這個表示我們要啟動的鏡像,如果不存在,則會下載一個8.0.17的鏡像。如果已經拉取了鏡像,也可以將mysql:8.0.17
替換成docker images查詢出的IMAGE ID
docker run --name mysql_test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345 -d mysql:8.0.17
三、查看容器運行狀態
docker ps
四、進入l容器,退出容器可以使用exit。其中也可以使用NAMES列對應mysql_test代替CONTAINER ID,下同
docker exec -it a77ede15e664 bash
五、連接容器中mysql。若宿主機安裝了mysql客戶端,則可以通過mysql -uroot -p -h 127.0.0.1連接,注意,必須要添加上-h,因為宿主機連接mysql容器需要通過tcp,而宿主機連接宿主機本地的mysql則不需要,使用socket就可以連接。如果宿主機未安裝mysql客戶端,則可通過如下命令連接mysql容器中mysql server
docker exec -it a77ede15e664 bash -c "mysql -uroot -p"
六、停止容器。通過docker ps查看已經不存在運行中的容器了
docker stop a77ede15e664
七、查看所有容器。可以看到上一步驟停止mysql容器后,mysql處於Exited狀態
docker ps -a
八、啟動一個停止的容器
docker start a77ede15e664
九、查看某個容器的具體信息
docker inspect a77ede15e664
十、查看當前宿主機已存在鏡像
docker images
十一、刪除容器。刪除前先停止容器,否則將會出現如下錯誤,-f為強制停止,最好不要使用。按照正常操作先停止再刪除
[root@localhost ~]# docker rm a77ede15e664 Error response from daemon: You cannot remove a running container a77ede15e6644527b4e55b8660347f23a331a75bab03511aea1f7c10761ef807. Stop the container before attempting removal or use -f [root@localhost ~]#
十二、刪除鏡像。刪除鏡像前可以通過docker images查詢當前鏡像的信息,並根據IMAGE ID刪除,刪除鏡像時需要保證該鏡像沒有容器在使用,否則會出現如下錯誤
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/mysql 8.0.17 2151acc12881 3 weeks ago 445 MB [root@localhost ~]# docker rmi 2151acc12881 Error response from daemon: conflict: unable to delete 2151acc12881 (cannot be forced) - image is being used by running container a77ede15e664 [root@localhost ~]#
十三、拷貝文件。如下示例為在宿主機新建一個test文件,並填充內容,將該文件拷貝到mysql容器/下,進入到容器,並查看拷貝的文件內容(MySQ配置文件在容器中的位置為/etc/mysql/my.cnf)
[root@localhost ~]# echo "it is a test" >> test [root@localhost ~]# docker cp test a77ede15e664:/ [root@localhost ~]# docker exec -it a77ede15e664 bash root@a77ede15e664:/# ls bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys test tmp usr var root@a77ede15e664:/# cat test it is a test root@a77ede15e664:/#
十四、查看容器相關日志
docker logs a77ede15e664
mysql在docker中安裝也可以參照mysql官方文檔
https://dev.mysql.com/doc/refman/5.7/en/docker-mysql-getting-started.html
另外,在啟動mysql時,如果不確定mysql啟動可配置的啟動環境參數是那些,可以先通過docker ps --no-trunc查找到當前容器啟動時使用的COMMAND,然后找到其中對應的sh文件,在里面即可查找到可以設置的環境變量
如mysql使用command
find / -name docker-entrypoint.sh查找出該sh文件后,打開,可以找到我們在上面啟動mysql時所使用的環境變量MYSQL_ROOT_PASSWORD,通過該腳本,也可以看出,如果我們不希望設置密碼,添加環境變量MYSQL_ALLOW_EMPTY_PASSWORD即可